繁体   English   中英

python读取utf8文本文件问题

[英]python read utf8 text file problem

我在python中有一个有关读取和打印utf8文本文件的问题。

我有一个utf8编码的test.txt,没有BOM。 该文件中包含两个字符:

大声

第一个字符“大”是中文,第二个“声”是日语。 现在,当我使用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加上Microsoft的修饰。 (3)您说您的第二个字符是日语,您可能表示它也不是中文,因此在big5 +中不太可能是有效字符。

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

声可能是日语,但它也是“声音”(繁体声)的简体中文。 cp950是繁体中文,不支持该简体字。

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

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

chcp 936

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

更新资料

阅读有关Ulipad的内容时,它说:

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

也许您可以将自动检测到的繁体中文替换为简体中文,这可以选择支持该特定字符的代码页和/或字体。 由于它不支持日语,因此可能仍有某些字符无法正确显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM