2009-05-16 21 views
2

私は未知のデータを扱っており、Python/Djangoを使用してMySQLデータベースに挿入しようとしています。私はかなり理解していないいくつかのエラーを取得して、いくつかの助けを探しています。ここにエラーがあります。Pythonの安全なUnicodeへの変換

Incorrect string value: '\xEF\xBF\xBDs m...' 

文字列が正しくUnicodeに変換されていないと思いますか?ここで私のコードはユニコード変換です。上記のUnicode変換なし

s = unicode(content, "utf-8", errors="replace") 

、私が手にエラーがすべてのヘルプは高く評価され

'utf8' codec can't decode byte 0x92 in position 31: unexpected code byte. You passed in 'Fabulous home on one of Decatur\x92s most 

です!

答えて

5

元のエンコーディングは何ですか?私はpixelbeat's答えから "cp1252"と仮定しています。その場合、行うことができます

>>> orig # Byte string, encoded in cp1252 
'Fabulous home on one of Decatur\x92s most' 

>>> uni = orig.decode('cp1252') 
>>> uni # Unicode string 
u'Fabulous home on one of Decatur\u2019s most' 

>>> s = uni.encode('utf8') 
>>> s # Correct byte string encoded in utf-8 
'Fabulous home on one of Decatur\xe2\x80\x99s most' 
1

"Fabulous ..."という文字列はutf-8のようには見えません。0x92は128より上にあり、マルチバイト文字の続きでなければなりません。しかし、その文字列では、それ自体で表示されます(明らかにアポストロフィを表します)。

3

0x92はWindows cp1252エンコーディングでは一重引用符で囲まれています。

\ xEF \ xBF \ xBDは、ユニコード交換文字 (誤ったcp1252文字の代わりに挿入された)のUTF8エンコードです。

あなたのデータベースは有効なUTF8データを受け入れていないようですか?

2オプション: 1.おそらくunicode(content、 "cp1252") を使用する必要があります。2. UTF-8をDBに挿入する場合は、適切に設定する必要があります。私はより知識のある他の人にその答えを残します

関連する問題