我有一个[legacy] mysql表,其字符集为"latin-1"
,但在"utf-8"
中存储了json信息。用户界面连接到此表,正确显示字符。我需要使用python脚本更新此表,但我无法摆脱编码地狱。
在mysql shell上,我发出"select words from pip where id_pip=42"
并收到:
"ventilationsplåtslageri":{"day":"1000","hour":"200","min":"30"}
但是当我尝试从数据库中获取它时,即使我尝试了几种不同的编码,也无法获得相同的编码。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import json
dbconn = MySQLdb.connect(host="host",port=3306,user="user",
passwd="pass",db="db", use_unicode=True, charset="utf8")
cursor1 = dbconn.cursor()
cursor1.execute("select words from pip where id_pip=42")
track = cursor1.fetchall()
print json.dumps(track, encoding="utf8" )
我在这段代码上尝试了很多不同的配置,例如我使用"use_unicode=False, charset="latin1"
更改了print json.dumps(filter_track, encoding="utf8" )
,但我仍然得到"ventilationspl\u00c3\u00a5tslageri\"
或"ventilationspl\u00e5tslageri\"
而不是我想要的内容:"ventilationsplÃ¥tslageri"
我无法更改数据库,我需要使用sql update命令更新此数据库字段,所以我担心如果我搞乱了lagacy数据库。
答案 0 :(得分:0)
我不确定我是否理解你的问题,但是......
如果内容是在 Latin-1 中返回的,并且您希望它在 UTF-8 中,我会假设您首先需要解码来自 Latin-1 的内容,然后将其编码为 UTF-8 。
latin1_content.decode('latin1').encode('utf8')