我在编码格式为“ISO-8859-2”的文本文件中有文本“confrères”。我想在 python 中将此值编码为“UTF-8”。
我在 python(2.7) 中使用以下代码进行转换,但转换后的值 ["confrčres"] 与原始值 ["confrères"] 不同。
# -*- coding: utf-8 -*-
import chardet
import codecs
a1=codecs.open('.../test.txt', 'r')
a=a1.read()
b = a.decode(chardet.detect(a)['encoding']).encode('utf8')
a1=codecs.open('.../test_out.txt', 'w').write(b)
知道如何在输出文件中以 UTF8 编码格式获取实际值。
谢谢
请您参考如下方法:
如果您知道所使用的编解码器,请不要使用chardet。字符检测从来都不是万无一失的,库猜错了您的文件。
请注意,ISO-8859-2 是错误的编解码器,因为该编解码器甚至无法对字母 è 进行编码。您有 ISO-8859-1 (Latin-1) 或 Windows 代码页 1252 数据; è在8859-1和cp1252编码为0xE8,0xE8在8859-2为č:
>>> print u'confrčres'.encode('iso-8859-2').decode('iso-8859-1')
confrères
8859-2 可能是 chardet 做出的猜测吗?
您可以使用 io library即时处理解码和编码;它是处理 Python 3 中所有 I/O 的相同代码库,并且比 codecs 问题更少:
from shutil import copyfileobj
with open('test.txt', 'r', encoding='iso-8859-1') as inf:
with open('test_out.txt', 'w', encoding='utf8') as outf:
copyfileobj(inf, outf)
我用了shutil.copyfileobj()处理数据的复制。
