gpt4 book ai didi

Python 统一码错误

转载 作者:行者123 更新时间:2023-12-01 05:15:42 25 4
gpt4 key购买 nike

我正在使用 PyPy 在 RPython 中创建虚拟机。问题是,当我尝试添加 unicode 支持时,我发现了一个不寻常的问题。我将在示例中使用字母“á”。

# The char in the example is á
print len(char)

OUTPUT:
2

我明白字母“á”如何占用两个字节,因此长度为 2。但问题是当我使用下面的示例时,我遇到了问题。

# In this example instr = "á" (including the quotes)
for char in instr:
print hex(int(ord(char)))

OUTPUT:
0x22
0xc3
0xa1
0x22

有 4 个数字。 0x22 是引号,但引号之间只有 1 个字母,但有两个数字。我的问题是,我测试此脚本的一些机器产生了以下输出:

OUTPUT:
0x22
0xe1
0x22

是否有办法使两台机器上的输出相同?每个脚本都完全相同。

最佳答案

两台机器上的程序没有得到相同的输入:

In [154]: '\xe1'.decode('cp1252').encode('utf_8') == '\xc3\xa1'
Out[154]: True

当您在控制台中键入 á 时,您可能会看到字形 á,但控制台会将其转换为字节。它转换成的特定字节取决于控制台使用的编码。在 Windows 计算机上,可能是 cp1252,而在 Unix 计算机上可能是 utf-8。

因此,您可能看到输入是相同的,但控制台(以及程序)接收到不同的输入。

如果您的程序要使用适当的编码对字节进行解码,然后使用 unicode,那么这两个程序在此之后将进行相同的操作。如果您从 sys.stdin 接收字节,则 sys.stdin.encoding 将是 Python 检测到控制台正在使用的编码。

关于Python 统一码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281042/

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