我有关于阅读和打印utf8文本文件的python问题。
我有一个没有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繁体中文。
答案 0 :(得分:7)
打印时出现错误,因为:
(1)Ulipad正在打印到sys.stdout,这是旧版MS-DOS命令提示符窗口的标准输出。 (2)您的繁体中文Windows XP使用cp950编码,这是big5 plus Microsoftian fiddling。 (3)你说你的第二个字符是日语,你可能意味着它不是中文,因此不太可能是big5 +中的有效字符。
另一方面,IDLE正在写入自己的窗口并且没有绑定在MS-DOS轮上:-) ...因此可以打印更多的字符库。
答案 1 :(得分:0)
由于您使用的是中文版Windows,因此您可以将默认代码页更改为cp936(统一中文)并查看输出。
我对Ulipad不熟悉,但尝试在Windows控制台中运行:
chcp 936
然后运行您的脚本。如果这不起作用,您可以通过“控制面板”,“区域和语言选项”,“高级”选项卡更改非Unicode程序的默认语言。这就是我在美国英语Windows上的控制台中打印中文的方法。
<强>更新强>
阅读有关Ulipad的消息,它说:
多语言支持目前 支持4种语言:英语, 西班牙语,简体中文和 繁体中文,可以 自动检测。
也许你可以覆盖自动检测到的繁体中文到简体中文,它可以选择支持该特定字符的代码页和/或字体。由于它不支持日语,因此可能仍然存在无法正确显示的字符。