在Python中转换为安全Unicode
我正在处理一些未知的数据,想用Python/Django把它们插入到MySQL数据库中。但是我遇到了一些我不太理解的错误,所以想寻求一些帮助。以下是错误信息。
Incorrect string value: '\xEF\xBF\xBDs m...'
我猜可能是字符串没有正确转换为unicode格式?这是我用来进行unicode转换的代码。
s = unicode(content, "utf-8", errors="replace")
如果没有上面的unicode转换,我得到的错误是
'utf8' codec can't decode byte 0x92 in position 31: unexpected code byte. You passed in 'Fabulous home on one of Decatur\x92s most
任何帮助都非常感谢!
3 个回答
1
“Fabulous...”这个字符串看起来不像是utf-8编码的:0x92这个数字大于128,所以它应该是一个多字节字符的一部分。但是在这个字符串中,它单独出现了(显然是表示一个撇号)。
3
0x92在Windows的cp1252编码中是右单引号。
\xEF\xBF\xBD是Unicode替代字符的UTF8编码(这个字符是因为原来的cp1252字符出错而插入的)。
所以看起来你的数据库不接受有效的UTF8数据?
有两个选择: 1. 也许你应该使用unicode(content,"cp1252")。 2. 如果你想把UTF-8数据插入数据库,那么你需要正确配置数据库。我就不多说了,这个问题可以留给更懂的人来回答。
5
原始编码是什么?我猜是“cp1252”,这个是根据pixelbeat的回答来的。如果是这样的话,你可以这样做:
>>> 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'