用Python将utf-8转换为拉丁语-1

2024-06-13 20:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想这样做:

获取此utf-8字符串的字节:

访视频

用拉丁文-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)

Tags: 字符串in编码视频字节positioncanutf
2条回答

你要做的事简直是不可能的。不能将这些字符编码为拉丁-1,因为拉丁-1中不存在这些字符。

为了得到您想要的输出,您需要将UTF-8字节解码为拉丁语-1。像这样:

s = u'访视频'.encode('utf-8').decode('latin-1')

但是,您想要的输出看起来不像实际的拉丁语1,因为在拉丁语1中,字符\x86\x91是不可打印的,所以您将得到:

è®¿è§ é¢

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

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

s = u'访视频'.encode('utf-8').decode('cp1252')

您需要首先编码到UTF-8UTF-8可以编码任何Unicode字符串),并且与7-bit ASCII集完全兼容(任何ASCII bytestring都是正确的UTF-8–encoded字符串)。以下内容:

>>> u'访视频'.encode('UTF-8').decode('latin-1')
u'\xe8\xae\xbf\xe8\xa7\x86\xe9\xa2\x91'

注意:UTF-8编码可以处理任何Unicode字符。它也是向后的 与ASCII兼容,因此纯ASCII文件也可以被视为UTF-8 文件,以及碰巧只使用ASCII字符的UTF-8文件与 ASCII具有相同字符的文件

相关问题 更多 >