gpt4 book ai didi

python - 不能单独工作的 Unicode 字符,Python

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:12 25 4
gpt4 key购买 nike

好的,我还有另一个 Python Unicode 问题。在 IDLE windows 7 中,如下代码:

uni = u"\u4E0D\u65E0"
binary = uni.encode("utf-8")
print binary

打印两个汉字,不无,正确的。但是,如果我将第一行替换为

uni = u"\u65E0"

即只有第二个字符,它会打印 æ— 代替。虽然如果我只用第一个字符替换它

u"\u4E0D"

它给出了正确的输出不

这是一个错误,还是我做错了什么?

完整代码:

uni = u"\u4E0D\u65E0"

binary = uni.encode("utf-8")

print binary

uni = u"\u65E0"

binary = uni.encode("utf-8")

print binary

uni = u"\u4E0D"

binary = uni.encode("utf-8")

print binary

输出:

不无

æ—

最佳答案

unicode字符串u"\u4E0D\u65E0"由两个text字符组成.

当一个 unicode 字符串被编码时,它被转换成一个 bytes 序列(不是二进制)。根据使用的编码方式,文本字符到字节的映射可能不是一对一的。例如,“utf8”编码可以使用一到三个字节来表示单个字符:

>>> u'\u65E0'.encode('utf8')
'\xe6\x97\xa0'

现在,在可以打印 字节序列之前,python(或 IDLE)必须尝试对其进行解码。但由于它无法知道使用的是什么编码,因此它只能猜测。出于某种原因,对于其中一个示例,IDLE 似乎错误地猜测了“cp1252”:

>>> text = u'\u65E0'.encode('utf8').decode('cp1252')
>>> text
u'\xe6\u2014\xa0'
>>> print text
æ— 

请注意 text 中有 三个 个字符 - 最后一个是不间断空格。

编辑

严格来说,IDLE 错误地猜测了所有三个示例的“cp1252”。第二个只是“成功”,因为每个字节恰好映射到一个有效的文本字符(“cp1252”是一个 8 位单字节编码)。另外两个示例包含字节\x8d,它没有在“cp1252”中定义。对于这些情况,IDLE(最终)回退到“utf8”,它给出了正确的输出。

关于python - 不能单独工作的 Unicode 字符,Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com