Python 将MySQL中编码错误的汉字转换为UTF-8

Python 将MySQL中编码错误的汉字转换为UTF-8,python,mysql,encoding,utf-8,latin1,Python,Mysql,Encoding,Utf 8,Latin1,我有一个很大的MySQL表,里面填充了不正确编码的汉字。我相信它们应该用拉丁语编码(iso-8859-1),但我就是找不到从数据库行的内容中获取汉字的方法 在latin1和utf8之间转换没有帮助-字段保持不变。我尝试过用各种编码重新导入数据库-结果总是一样的 当前内容及其内容的一些示例: 惨事 ä¸应该是不 应该是最 我也尝试过使用Python来尝试“解码”内容,但同样没有成功。我尝试了各种组合: databasefield.decode('iso-8859-1').encode('utf

我有一个很大的MySQL表,里面填充了不正确编码的汉字。我相信它们应该用拉丁语编码(iso-8859-1),但我就是找不到从数据库行的内容中获取汉字的方法

在latin1和utf8之间转换没有帮助-字段保持不变。我尝试过用各种编码重新导入数据库-结果总是一样的

当前内容及其内容的一些示例:

  • 惨事

  • ä
    ¸应该是

  • 应该是

我也尝试过使用Python来尝试“解码”内容,但同样没有成功。我尝试了各种组合:

databasefield.decode('iso-8859-1').encode('utf8')
但我也不能让这样的事情发生

很抱歉问了这么一个模糊的问题,但我只是不知道如何继续努力去解决这个问题


有人知道这里有什么问题吗?

您看到的是解码为以下格式的UTF-8:

解决这一问题需要采取另一种方式:

>>> print u'惨事'.encode('cp1252').decode('utf8')
惨事
>>> print u'最'.encode('cp1252').decode('utf8')
最
尽管如此,还是有一些损失,如
使用1252不支持的代码点:

>>> u'不'.encode('utf8')
'\xe4\xb8\x8d'
>>> print u'不'.encode('utf8').decode('cp1252')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/encodings/cp1252.py", line 15, in decode
    return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 2: character maps to <undefined>
>>u'不'.编码('utf8')
“\xe4\xb8\x8d”
>>>打印u'不'.编码('utf8')。解码('cp1252')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/encodings/cp1252.py”,第15行,解码
返回编解码器.charmap\u解码(输入、错误、解码表)
UnicodeDecodeError:“charmap”编解码器无法解码位置2:字符映射到的字节0x8d

不过,这里还可以尝试其他几个Windows代码页候选者;例如,将产生类似的输出,但只有微小的差异。

第一个示例的拉丁1字节之间有额外的字符,构成两个正确图示符的UTF-8<代码>u'惨事'.encode('utf8')。decode('latin1')
导致
。我想我找到了你的解决方案,让我验证一下。你可以给我们这些值的表示形式。
repr(databasefield)
为每一项提供了什么?例如,我们可能正在查看您的Windows代码页认为字节是什么。
>>> u'不'.encode('utf8')
'\xe4\xb8\x8d'
>>> print u'不'.encode('utf8').decode('cp1252')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/encodings/cp1252.py", line 15, in decode
    return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 2: character maps to <undefined>