2

我编写了一个非常小的程序,它将一个文件的所有行复制到另一个文件 - 当该行包含某个字符串时。这是完整的来源:

f_in = open("all.txt", "r")
f_out = open("all.out", "w")

for line in f_in:
    if "<title>" in line:
        f_out.write(line)

f_out.close()
f_in.close()

这非常有效,直到涉及 all.txt 中的 utf-8 字符。然后它失败说:

UnicodeDecodeError:“charmap”编解码器无法解码位置 7102 中的字节 0x9d:字符映射到 <undefined>

现在我做了一个糟糕的解决方法:在目录 \Python\Lib\encodings 中,我复制了 utf-8.py 并将其重命名为 cp1252.py。

从现在开始 - 上面的小程序运行没有问题。但必须有一个更优雅的解决方案。你能告诉我让 Phyton 使用 utf-8.py 而不是 cp1252.py 需要什么吗?

我确信这是可能的,不需要大量的转换和解码等等 - 只需告诉 Python 使用另一个解码而不是 cp1252.py。

4

1 回答 1

4

用于io.open()读取和写入 Unicode 值:

import io

with io.open('all.txt', 'r', encoding='utf8') as f_in:
    with io.open('all.out', 'w', encoding='utf8') as f_out:
        for line in f_in:
            if u"<title>" in line:
                f_out.write(line)

重命名编解码器文件是您应该做的最后一件事。

于 2013-09-03T09:53:00.043 回答