我正在尝试处理几个都有各种编码的文档 - 一些utf-8,一些ISO-8859-2,一些ascii等。是否有一种可靠的解码方式来处理标准编码?
我尝试了以下内容:
import chardet
encoding = chardet.detect(text)
text = unicode(text,encoding['encoding']).decode(sys.getdefaultencoding(),'ignore')
使用上面的代码我仍然会收到UnicodeEncodeError错误
答案 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,并且可能包含无法在默认情况下表示的字符编码,导致它无法编码。 (你可能实际上并不想忽略错误,因为看起来你只是想尝试使用错误的函数。)