Skip to main content
 首页 » 编程设计

python读取utf8文本文件问题

2025年05月04日14think

我在使用 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 轮的限制:-) ...所以它可以打印更多的字符。