读取Unicode文件 - Python3.2

时间:2012-04-25 09:28:08

标签: python unicode file-io python-3.x

我正在尝试使用Python3.2读取一些文件,其中一些文件可能包含unicode,而其他文件则不包含。

当我尝试:

file = open(item_path + item, encoding="utf-8")
for line in file:
    print (repr(line))

我收到错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 13-16: ordinal not in range(128)

我在这里关注文档:http://docs.python.org/release/3.0.1/howto/unicode.html

为什么Python会在此代码中的任何位置尝试编码为ascii?

2 个答案:

答案 0 :(得分:3)

问题是Python 3中的repr(line)也返回Unicode字符串。它不会将上述128个字符转换为ASCII转义序列。

如果要查看转义序列,请使用ascii(line)

实际上,repr(line)应该返回字符串,如果放在源代码中,则生成具有相同值的对象。这样,Python 3的行为就可以了,因为源文件中不需要ASCII转义序列来表示超过ASCII字符的字符串。这些天使用UTF-8或其他一些Unicode编码是很自然的。事实上,Python 2为这些角色生成了转义序列。

答案 1 :(得分:2)

您的输出编码是什么?如果您取消对print()的通话,它是否会开始工作?

我怀疑你有非UTF-8语言环境,所以Python试图将repr(line)编码为ASCII,作为打印它的一部分。

要解决此问题,您必须对字符串进行编码并打印字节数组,或者将默认编码设置为可以处理字符串的字符串(UTF-8是显而易见的选择)。