4

製品情報の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('Â','')

どこから来たのかわかりませんが、Â著作権記号の横にあるものを見ました。

4

2 に答える 2

15

UTF-8 に変換するには、それがどのエンコーディングであるかを知る必要があります。あなたの説明に基づいて、Latin-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
于 2012-10-25T22:04:35.933 に答える
8

エンコーディングを推測するのではなく、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
于 2012-10-25T22:54:40.130 に答える