Skip to main content
 首页 » 编程设计

python之编码解码Python

2025年05月04日33fff_TT

我在编码格式为“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()处理数据的复制。