在Python中将utf-8转换为latin-1

Ore*_*ail 1 python unicode encoding utf-8 latin1

我想做这个:

取这个utf-8字符串的字节:

访视频

在latin-1中对这些字节进行编码并打印结果:

访视é¢"

我如何在Python中执行此操作?

# -*- coding: utf-8
s = u'???'.encode('latin-1')
Run Code Online (Sandbox Code Playgroud)

导致此异常:

s = u'???'.encode('latin-1')
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 5

你要求做的事实上是不可能的.您不能将这些字符编码为Latin-1,因为这些字符在Latin-1中不存在.

要获得所需的输出,您需要将UTF-8字节解码,就像它们是Latin-1一样.像这样:

s = u'???'.encode('utf-8').decode('latin-1')
Run Code Online (Sandbox Code Playgroud)

然而,您所需的输出并不像实际的Latin-1,因为拉丁语-1,字符\x86\x91是不可打印的,所以你会得到这样的:

è®¿è§ é¢
Run Code Online (Sandbox Code Playgroud)

(请注意,中间的空格代替,而末尾的空格;这些实际上是不可见的控制字符,而不是空格.)

看起来你想要一个Latin-1超集,可能是Windows代码页1252.在这种情况下你真正想要的是:

s = u'???'.encode('utf-8').decode('cp1252')
Run Code Online (Sandbox Code Playgroud)