我在文本文件中有文字“confrères”,编码格式为“ISO-8859-2”。我想在python中以“UTF-8”编码这个值。
我在python(2.7)中使用以下代码进行转换,但转换后的值[“confrčres”]与原始值[“confrères”]不同。< / p>
# -*- 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编码格式获取实际值。
由于
答案 0 :(得分:5)
如果您知道使用的编解码器,请不要使用chardet
。字符检测绝不是万无一失的,图书馆猜错了你的文件。
请注意,ISO-8859-2是错误的编解码器,因为该编解码器甚至无法对字母è
进行编码。您可以使用ISO-8859-1(Latin-1)或Windows代码页1252数据; 8859-1中的è
和cp1252编码为0xE8,8859-2中的0xE8为č
:
>>> 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()
来处理数据的复制。