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

时间:2014-11-14 20:24:59

标签: python unicode encoding utf-8 latin1

我想这样做:

取这个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)

2 个答案:

答案 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-8UTF-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文件具有相同的字符

相关问题