我在使用 python 读取和打印 utf8 文本文件时遇到问题。
我有一个没有 BOM 的 utf8 编码的 test.txt。该文件中有两个字符:
大声
第一个“大”是中文,第二个“声”是日文。现在,当我使用 Ulipad(python 编辑器)运行以下代码来读取 txt 文件,并打印这两个字符时。
import codecs
infile = "C:\\test.txt"
f = codecs.open(infile, "r", "utf-8")
s = f.read()
print(s)
我得到了这个错误,
"UnicodeEncodeError: 'cp950' codec can't encode character '\u58f0' in position 1:
illegal multibyte sequence"
我发现它是由第二个字符“声”引起的。
但是当我使用相同的代码在 python 默认 GUI IDLE 中进行测试时,它可以毫无错误地打印这两个字符。那么,我该如何解决这个问题。
我的运行环境是python 3.1,windows xp繁体中文。
请您参考如下方法:
打印时出现错误是因为:
(1) Ulipad 正在打印到 sys.stdout,这是旧版 MS-DOS 命令提示符窗口的标准输出。 (2)你的繁体中文Windows XP用的是cp950编码,就是big5加上微软的摆弄。 (3) 你说你的第二个字符是日文,你的意思可能是它不是中文,因此不太可能是 big5+ 中的有效字符。
另一方面,IDLE 正在写入它自己的窗口并且不受 MS-DOS 轮的限制:-) ...所以它可以打印更多的字符。
