我对python有一个关于读取和打印utf8文本文件的问题。在
我有一个测试.txt不带BOM的utf8编码。此文件包含两个字符:
大声
第一个字是中文,第二个字是日语。现在,当我使用Ulipad(python编辑器)运行以下代码来读取txt文件,并打印这两个字符。在
^{pr2}$我犯了这个错误
"UnicodeEncodeError: 'cp950' codec can't encode character '\u58f0' in position 1:
illegal multibyte sequence"
我发现是第二个字“声”造成的。在
但是当我使用相同的代码在python默认GUI IDLE中进行测试时,它可以毫无错误地打印这两个字符。那么,我该怎么解决这个问题呢。在
我的运行环境是python3.1,windowsxp繁体中文。在
打印时出现错误是因为:
(1)Ulipad正在打印到系统标准输出这是旧式MS-DOS命令提示符窗口的标准输出。 (2) 您的传统中文Windows XP使用cp950编码,这是big5加上微软的摆弄。 (3) 你说你的第二个字符是日语,这可能意味着它不是中文,因此不太可能是big5+中的有效字符。在
另一方面,IDLE正在写入自己的窗口,并且没有绑定在MS-DOS控制盘上:-)。。。所以它可以打印出更多的角色。在
声可能是日语,但它也是“声音”的简体中文(繁体聲)。cp950是繁体中文,不支持简体字。在
由于您使用的是中文版本的Windows,所以您可以将默认代码页更改为cp936(统一中文)并查看输出。在
我不熟悉Ulipad,但请尝试在Windows控制台中运行:
然后运行你的脚本。如果不起作用,可以通过“控制面板”、“区域和语言选项”、“高级”选项卡更改非Unicode程序的默认语言。这就是我如何在我的美式英文视窗控制台上打印中文的方法。在
更新
读到Ulipad,它说:
也许您可以将自动检测到的繁体中文重写为简体中文,这可能会选择支持该特定字符的代码页和/或字体。因为它不支持日语,所以可能仍有一些字符无法正确显示。在
相关问题 更多 >
编程相关推荐