python读取utf8文本文件问题

时间:2010-05-24 11:59:30

标签: python unicode

我有关于阅读和打印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繁体中文。

2 个答案:

答案 0 :(得分:7)

打印时出现错误,因为:

(1)Ulipad正在打印到sys.stdout,这是旧版MS-DOS命令提示符窗口的标准输出。 (2)您的繁体中文Windows XP使用cp950编码,这是big5 plus Microsoftian fiddling。 (3)你说你的第二个字符是日语,你可能意味着它不是中文,因此不太可能是big5 +中的有效字符。

另一方面,IDLE正在写入自己的窗口并且没有绑定在MS-DOS轮上:-) ...因此可以打印更多的字符库。

答案 1 :(得分:0)

声音可能是日语,但它也是“声音”(传统声音)的简体中文。 cp950是繁体中文,不支持这种简化字符。

由于您使用的是中文版Windows,因此您可以将默认代码页更改为cp936(统一中文)并查看输出。

我对Ulipad不熟悉,但尝试在Windows控制台中运行:

chcp 936

然后运行您的脚本。如果这不起作用,您可以通过“控制面板”,“区域和语言选项”,“高级”选项卡更改非Unicode程序的默认语言。这就是我在美国英语Windows上的控制台中打印中文的方法。

<强>更新

阅读有关Ulipad的消息,它说:

  

多语言支持目前   支持4种语言:英语,   西班牙语,简体中文和   繁体中文,可以   自动检测。

也许你可以覆盖自动检测到的繁体中文到简体中文,它可以选择支持该特定字符的代码页和/或字体。由于它不支持日语,因此可能仍然存在无法正确显示的字符。