2009-05-16 2 views
2

Ich habe mit unbekannten Daten zu tun und versuchen, in eine MySQL-Datenbank mit Python/Django einzufügen. Ich bekomme einige Fehler, die ich nicht ganz verstehe und suche nach Hilfe. Hier ist der Fehler.Umwandlung in sichere Unicode in Python

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

Meine Vermutung ist, dass die Zeichenfolge nicht ordnungsgemäß in Unicode konvertiert wird? Hier ist mein Code für die Unicode-Konvertierung.

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

Ohne die oben Unicode-Konvertierung ist der Fehler, den ich bekommen

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

Jede Hilfe ist willkommen!

Antwort

5

Was ist die ursprüngliche Kodierung? Ich nehme an "cp1252", von pixelbeat's antwort. In diesem Fall können Sie

>>> 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' 
tun
1

Die Zeichenfolge "Fabulous ..." sieht nicht wie utf-8 aus: 0x92 liegt über 128 und sollte daher eine Fortsetzung eines Multi-Byte-Zeichens sein. In dieser Zeichenfolge erscheint es jedoch alleine (anscheinend ein Apostroph darstellend).

3

0x92 ist Recht einzelnes lockiges Zitat in Windows cp1252 Codierung.

\ xEF \ xBF \ xBD ist die UTF8-Codierung des Unicode-Ersatzzeichens (das anstelle des fehlerhaften CP1252-Zeichens eingefügt wurde).

Es sieht also so aus, als ob Ihre Datenbank die gültigen UTF8-Daten nicht akzeptiert?

2 Möglichkeiten: 1. Vielleicht sollten Sie Unicode (Inhalt, "cp1252") 2. Wenn Sie UTF-8 in die DB einfügen wollen, dann müssen Sie es config entsprechend werden. Ich überlasse diese Antwort anderen besser kenntnisreichen