我在 WinXP 5.1.2600 下工作,编写一个涉及中文拼音的 Python 应用程序,这让我陷入了无穷无尽的 Unicode 问题。切换到 Python 3.0 解决了其中的许多问题。但是出于某种奇怪的原因,控制台输出的 print() 函数不支持 Unicode。这是一个很小的程序。
print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüelā'
print(str1)
输出是(为了便于阅读,将尖括号更改为方括号):
sys.stdout 编码为“cp1252” 回溯(最近一次通话最后): [模块] 中的文件“TestPrintEncoding.py”,第 22 行 打印(str1) 文件“C:\Python30\lib\io.py”,第 1491 行,写入 b = 编码器.encode(s) 文件“C:\Python30\lib\encodings\cp1252.py”,第 19 行,在编码中 返回 codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError:“charmap”编解码器无法编码字符“\u0101” 在位置 4:字符映射到 [未定义]
请注意, ü = \xfc = 252 没有问题,因为它是高位 ASCII。但是 ā = \u0101 超过 8 位。
任何人都知道如何将 sys.stdout 的编码更改为“utf-8”?请记住codecs
,如果我正确理解文档,Python 3.0 不再使用该模块。
抱歉,我给了你没有序言的程序。在给出 3 行之前,它的开头是这样的:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
不幸的是,“coding:”行指定的编码是源代码的编码,而不是控制台输出的编码。但是谢谢你的想法!