我在 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:”行指定的编码是源代码的编码,而不是控制台输出的编码。但是谢谢你的想法!