gpt4 book ai didi

python - 对非 BMP 字符进行编码时出错

转载 作者:行者123 更新时间:2023-12-01 04:47:55 25 4
gpt4 key购买 nike

我用 python 3.4 开发了一个小程序,但是当我尝试运行它时,最后显示:
文件“C:\Python34\lib\idlelib\PyShell.py”,第 1352 行,写入
返回 self.shell.write(s, self.tags)
UnicodeEncodeError:“UCS-2”编解码器无法对位置 39559-39559 中的字符进行编码:Tk 不支持非 BMP 字符

我已经尝试了所有方法,但一无所获。请帮助!

最佳答案

我认为您所做的相当于以下操作。

>>> print('\U00011111')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
print('\U00011111')
File "C:\Programs\Python34\lib\idlelib\PyShell.py", line 1347, in write
return self.shell.write(s, self.tags)
UnicodeEncodeError: 'UCS-2' codec can't encode character '\U00011111' in position 0: Non-BMP character not supported in Tk

问题如上所述:Idle 使用 tkinter 接口(interface)连接 tcl/tk,并且 tk 无法显示非 BMP 补充字符 (ord(char) > 0xFFFF)。

只要使用 utf-8(或 -16 或 -32)编码,将包含非 BMP 字符的字符串保存到文件中就可以正常工作。

在 Windows 上,控制台解释器会给出相同的错误,并将“UCS-2”替换为“charmap”。控制台解释器实际上更糟糕,因为它甚至对于某些 BMP 字符也会引发错误,具体取决于所使用的代码页。不知道其他系统上情况如何。

编辑我忘记了最好的选择,至少在 Windows 上是这样。以下任一操作都将在任何 ascii 终端上打印任何字符串。

>>> repr('\U00011111')
"'\U00011111'"
>>> ascii('\U00011111')
"'\\U00011111'"

repr() 在回显时不会使用双反斜杠,而 ascii() 则会。这些转义的字符多于空闲所需的字符,但不会在 >>> 提示符处引发异常。但是,由于我不明白的原因, print(repr('\U00011111')) 失败,因此程序中需要 print(ascii(s)) 来打印 s。

关于python - 对非 BMP 字符进行编码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042014/

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