異なる文字列のリストがあります。cp1251
、ASCII
または他の何かにいることもあります。特にこのデータを JSON にダンプしようとしたときにエラー (UncicodeDecodeError) が発生したため、それらを処理 (Unicode に変換) する必要があります。
これどうやってするの?
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 がこの回答へのコメントで指摘しているように、最初にデータを破損したコードを修正する必要があります。
エンコーディングを知っているなら、それはかなり簡単なはずです:
unicode_string = encoded_string.decode(encoding)
エンコーディングがわからない場合、それを検出するのは難しいかもしれませんが、それはあなたが期待するエンコーディングと言語に依存します。
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を読んでください。