1

異なる文字列のリストがあります。cp1251ASCIIまたは他の何かにいることもあります。特にこのデータを JSON にダンプしようとしたときにエラー (UncicodeDecodeError) が発生したため、それらを処理 (Unicode に変換) する必要があります。

これどうやってするの?

4

3 に答える 3

4

chardetを使用して文字列のエンコーディングを検出できるため、それらのリストを Unicode (Python 2.x) に変換する 1 つの方法は次のようになります。

import chardet

def unicodify(seq, min_confidence=0.5):
    result = []
    for text in seq:
        guess = chardet.detect(text)
        if guess["confidence"] < min_confidence:
            # chardet isn't confident enough in its guess, so:
            raise UnicodeDecodeError
        decoded = text.decode(guess["encoding"])
        result.append(decoded)
    return result

...次のように使用します:

>>> unicodify(["¿qué?", "什么?", "what?"])
[u'\xbfqu\xe9?', u'\u4ec0\u4e48\uff1f', u'what?']

警告 : chardetのようなソリューションは、最後の手段としてのみ使用する必要があります (たとえば、過去の過ちのために破損したデータセットを修復する場合)。実稼働コードに依存するには脆弱すぎます。代わりに、@bames53 がこの回答へのコメントで指摘しているように、最初にデータを破損したコードを修正する必要があります。

于 2013-02-13T15:48:58.897 に答える
0

エンコーディングを知っているなら、それはかなり簡単なはずです:

unicode_string = encoded_string.decode(encoding)

エンコーディングがわからない場合、それを検出するのは難しいかもしれませんが、それはあなたが期待するエンコーディングと言語に依存します。

于 2013-02-13T15:33:00.617 に答える
0

unicode 関数を使用して、文字列を組み込みの unicode 型に変換してみてください。

>>> s = "Some string"
>>> s = unicode(s)
>>> type(s)
<type 'unicode'>

あなたの問題については、これを試してユニコード文字列の新しいリストを作成してください。

new = []
for item in myList:
    new.append(unicode(item))

またはリスト内包表記を使用する

new = [unicode(item) for item in myList]

公式の Python Unicode HOWTOを読んでください。

于 2013-02-13T15:49:21.117 に答える