将海量文本转换为utf8

2024-05-17 11:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到一个产品信息的xml提要。信息是英文的,但不是用utf-8(智能引号、版权符号等)编码的。要处理这些信息,我需要将其转换为utf-8

我试过做以下的变化:

u'%s' % data
codecs.open(..., 'utf-8')
unicode(data)

但每试一次,我都会得到一个UnicodeDecodeError(各种各样的)。

如何将所有这些文本转换成utf-8

更新

感谢您的帮助,以下是最终的结果:

encoded_data = data.decode('ISO 8859-1').encode('utf-8').replace('Â','')

我不知道Â是从哪里来的,但我看到了一些版权符号旁边的那些符号。


Tags: 文本信息编码data产品智能unicode版权
2条回答

与其猜测编码,不如让chardet代表您猜测:

import chardet

def read(filename, encoding=None, min_confidence=0.5):
    """Return the contents of 'filename' as unicode, or some encoding."""
    with open(filename, "rb") as f:
        text = f.read()
    guess = chardet.detect(text)
    if guess["confidence"] < min_confidence:
        raise UnicodeDecodeError
    text = unicode(text, guess["encoding"])
    if encoding is not None:
        text = text.encode(encoding)
    return text

为了将它转换成UTF-8,您需要知道它的编码方式。根据你的描述,我猜它是拉丁语1的变体之一,ISO 8859-1或Windows-1252。如果是这样,那么您可以将其转换为UTF-8,如下所示:

data = 'Copyright \xA9 2012'  # \xA9 is the copyright symbol in Windows-1252

# Convert from Windows-1252 to UTF-8
encoded = data.decode('Windows-1252').encode('utf-8')

# Prints "Copyright © 2012"
print encoded

相关问题 更多 >