我写了一个非常小的程序,它将一个文件的所有行复制到另一个文件 - 当该行包含某个字符串时。以下是完整的来源:
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:字符映射到&lt; undefined&gt;
现在我做了一个BAD解决方法:在目录\ Python \ Lib \ encodings中我复制了utf-8.py并将其重命名为cp1252.py。
从现在开始 - 上面的小程序运行没有问题。但必须有一个更优雅的解决方案。你能告诉我使Phyton使用utf-8.py而不是cp1252.py需要什么吗?
我确信这是可能的,没有繁重的转换和解码等等 - 只要告诉Python使用另一个解码而不是cp1252.py。
答案 0 :(得分:3)
使用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)
重命名编解码器文件是你应该做的最后一件事。