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

标签 python python-3.x python-idle

我用 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/

相关文章:

适用于 Maya 的 Python : Why can't I use a variable in concatination with a wildcard?

iOS自定义空闲定时器

python - 从命令行启动 Python IDLE 以编辑脚本

python - 将具有度分秒(DMS)坐标的 Pandas 数据框转换为十进制度

python - 如何在 Google 应用引擎上使用 gcloud?

python - 我们可以在 Python 中添加 'OR' 运算符以及 if 和 else 吗?

python - 为使用 Python-C-API 定义的相同自定义类型的函数设置不同的文档字符串

Python IDLE 卡住

python - AttributeError: 'Application' 对象没有属性 'label'

python - 使 'isinstance' 与装饰器一起工作