在Python中使用非ASCII字符进行文件I/O
我正在写一个Python脚本,这个脚本需要读取一个用UTF-8编码的XML文件,然后对它进行一些处理,最后把结果保存到Google的Datastore(这是一个App Engine程序)。
我读取和解析文件的方式很简单,就是用file.readline()和一些正则表达式。不过,我遇到的问题是,这个文件里包含了很多不同语言的字符,比如说可能会有é、Å,或者俄语和希腊语的字符。
一开始我遇到了一个错误,错误信息是:“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)。”我尝试把打开文件时的编码改成“ISO-8859-15”,这样虽然解决了错误,但输出的字符显示得不对。
所以我想问的是:在Python中,如何处理一个用UTF-8编码的文件,而不让Python在文件里的特殊字符上卡住呢?希望我说得够清楚,提前感谢任何建议。
3 个回答
0
为了更详细地解释这个答案,并参考effbot,你可以这样处理每一行:
raw = file.readline()
proc = raw.decode('utf-8')
1
你说你把文件的编码改成了ISO-8859-1。你试过把它改成UTF-8吗?
4
在str.decode
中指定UTF-8编码
>>> print '\xe2\x99\x9e'.decode('utf-8')
♞
这应该是一个棋子,但太小了,看不清楚 :)