我有一个包含'®'字符的Windows-1252编码输入文件。我需要将此字符写入UTF-8文件。还假设我必须使用Python 2.7。看起来很简单,但我不断收到UnicodeDecodeErrors。如何从Windows-1252文件中读取®字符并写入UTF-8文件
我原本只是打开使用codecs.open()
使用UTF-8编码,它工作得很好了所有的ASCII字符,直到它遇到®符号,于是它用错误哽咽原始文件:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xae in position 2867043:
invalid start byte
我知道我必须正确解码它作为cp1252来解决这个问题,所以我打开它以适当的编码,然后在写入之前将数据编码为UTF-8。但是,这产生了新的错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 22:
ordinal not in range(128)
这里是一个最低工作例如:
with codecs.open('in.txt', mode='rb', encoding='cp1252') as inf:
with codecs.open('out.txt', mode='wb', encoding='utf-8') as of:
for line in inf:
of.write(line.encode('utf-8'))
这里是in.txt
内容:
Sample file
Here is my sample file® yay.
我想也许我可以打开它在'rb'模式中没有指定编码,并且具体处理每条线的解码和编码,如下所示:
of.write(line.decode('cp1252').encode('utf-8'))
但这也不起作用,给出与我刚刚打开UTF-8时相同的错误。
如何从Windows-1252文件读取数据,正确解码并将其编码为UTF-8并将其写入UTF-8文件?上述方法在过去一直为我工作,直到我遇到了®角色。
这解决了这个问题,但你能帮助我更好地理解一点。编解码器以某种方式处理我的编码?附:我会接受这一点,但它不会让我多几分钟。 –
@BobDylan:是的,在飞行中进行en /解码是编解码器包的**作业**。阅读文档! –
是的,我尝试了解更多,但文档似乎只记录所有的方法。关于它是如何工作的并没有真正的(低级别)描述。如果你有任何解释它的链接,而不仅仅是列出所有的方法,并简要描述他们做什么,但不知道它们是如何工作的,我想了解更多。没有biggie,如果没有,这是我接受的答案,我很欣赏你的时间。 –