我正在尝试使用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?
答案 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是显而易见的选择)。