在python中转换为安全的unicode

在python中转换为安全的unicode,python,django,unicode,Python,Django,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 de

我正在处理未知数据,并尝试使用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

感谢您的帮助

这个“难以置信的…”字符串看起来不像utf-8:0x92大于128,因此应该是多字节字符的延续。但是,在该字符串中,它自己出现(显然代表撇号)。

0x92是windows cp1252编码中正确的单卷曲引号

\xEF\xBF\xBD是unicode替换字符的UTF8编码 (插入的字符不是错误的cp1252字符)

所以看起来您的数据库不接受有效的UTF8数据

2种选择: 1.也许您应该使用unicode(内容为“cp1252”)
2.如果要将UTF-8插入数据库,则需要对其进行适当的配置。我将把这个答案留给其他更有知识的人

原始编码是什么?我假设答案是“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'