我想这样做:
取这个utf-8字符串的字节:
访视频
在latin-1中对这些字节进行编码并打印结果:
访视颓
我如何在Python中执行此操作?
# -*- coding: utf-8
s = u'访视频'.encode('latin-1')
导致此异常:
s = u'访视频'.encode('latin-1')
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)
答案 0 :(得分:5)
你要求做的事实上是不可能的。您不能将这些字符编码为Latin-1,因为这些字符在Latin-1中不存在。
要获得所需的输出,您希望解码 UTF-8字节,就像它们是Latin-1 一样。像这样:
s = u'访视频'.encode('utf-8').decode('latin-1')
但是,您想要的输出看起来不像实际的Latin-1,因为在Latin-1中,字符\x86
和\x91
是不可打印的,所以您将得到这个:
è®¿è§ é¢
(请注意,中间的空格代替†
,最后缺少‘
;这些实际上是不可见的控制字符,而不是空格。)
看起来你想要一个Latin-1超集,可能是Windows代码页1252.在这种情况下你真正想要的是:
s = u'访视频'.encode('utf-8').decode('cp1252')
答案 1 :(得分:1)
你需要首先编码为UTF-8
(UTF-8
可以编码任何Unicode字符串)并且与7-bit ASCII
集完全兼容(任何ASCII字节串都是正确的{{ 1}} string )。 :
UTF-8–encoded
注意:>>> u'访视频'.encode('UTF-8').decode('latin-1')
u'\xe8\xae\xbf\xe8\xa7\x86\xe9\xa2\x91'
编码可以处理任何Unicode字符。它也是倒退的
与UTF-8
兼容,因此纯ASCII
文件也可以被视为ASCII
文件和恰好只使用UTF-8
个字符的UTF-8
文件与a相同
ASCII
文件具有相同的字符