3

我正在尝试使用 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?

4

2 回答 2

3

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

ascii(line)如果您想查看转义序列,请改用。

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

于 2012-04-25T11:49:15.553 回答
2

你的输出编码是什么?如果您删除对 的调用print(),它会开始工作吗?

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

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

于 2012-04-25T09:32:12.047 回答