如何可靠地将各种编码解码为系统默认编码

时间:2010-10-31 16:05:23

标签: python character-encoding

我正在尝试处理几个都有各种编码的文档 - 一些utf-8,一些ISO-8859-2,一些ascii等。是否有一种可靠的解码方式来处理标准编码?

我尝试了以下内容:

import chardet
encoding = chardet.detect(text)
text = unicode(text,encoding['encoding']).decode(sys.getdefaultencoding(),'ignore')

使用上面的代码我仍然会收到UnicodeEncodeError错误

2 个答案:

答案 0 :(得分:3)

使用decode将字节转换为unicode,使用encode将unicode转换为字节:

text.decode(encoding['encoding'], 'ignore').encode(sys.getdefaultencoding(), 'ignore')

虽然我建议您对unicode对象本身进行处理,但如果您绝对需要使用字节,则建议使用UTF-8编码的字符串。 sys.getdefaultencoding()'ascii',它提供了非常有限的字符集。另见:http://wiki.python.org/moin/DefaultEncoding

答案 1 :(得分:0)

您可能意味着encode

u = unicode(text, encoding['encoding'], 'ignore')
text = u.encode(sys.getdefaultencoding(), 'ignore')

或等效且更常见的,

u = text.decode(encoding['encoding'], 'ignore')
text = u.encode(sys.getdefaultencoding(), 'ignore')

如上所述,您可能需要ignore:传入的文本中可能包含无效字符,导致其无法解码为Unicode,并且可能包含无法在默认情况下表示的字符编码,导致它无法编码。 (你可能实际上并不想忽略错误,因为看起来你只是想尝试使用错误的函数。)