使用Python进行非ASCII字符的文件I/O

4
我正在编写一个Python脚本,用于读取以UTF-8编码的XML文件,并对其进行一些操作,然后将其保存到Google的Datastore中(这是一个App Engine程序)。
我读取和解析文件的方式只是使用file.readline()和一些正则表达式。唯一的问题是,我正在处理的文件中有许多不同语言的字符,例如é、Å或俄语或希腊字符。
起初,我遇到了这样的错误:"UnicodeDecodeError:'ascii' codec无法解码位置0处的字节0xd0:序数不在范围内(128)。"然后我尝试将文件打开时的编码切换为"ISO-8859-15",这样就可以消除错误,但输出的字符显示不正确。
因此,我的问题是:如何在Python中处理以UTF-8编码的文件,而不会卡在文件中的所有特殊字符上?希望我的表述足够清晰,并感谢您提供的任何建议。

你的模式和要搜索的字符串是Unicode字符串吗? - nmichaels
是的 - 我在正则表达式中不寻找任何特殊字符。 - dshipper
3个回答

4

str.decode 中指定 UTF-8 编码。

>>> print '\xe2\x99\x9e'.decode('utf-8')
♞

那是一个象棋棋子,但太小了看不清 :)


@Nick 你到底是什么意思呢?😉 - Blender
@Blender 我?我说了什么吗? - Nick Johnson
当我使用解码函数时,有时它可以工作,但我也会遇到Unicode解码错误。我该如何摆脱这个问题? - dshipper
这意味着您的输入不符合您指定的编码方式,即UTF-8。您确定它是UTF-8吗?确切的错误信息是什么? - Brian Goldman

1

你说你已经将文件的编码更改为ISO-8859-1。你尝试过将其更改为UTF-8吗?


0

关于答案的详细说明并参考 effbot,你可以像这样处理每一行:

raw = file.readline()
proc = raw.decode('utf-8')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接