使用latin1字符集在表中编码UTF8数据

时间:2015-10-12 13:04:40

标签: python mysql utf-8 character-encoding

我有一个[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数据库。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,但是......

如果内容是在 Latin-1 中返回的,并且您希望它在 UTF-8 中,我会假设您首先需要解码来自 Latin-1 的内容,然后将其编码为 UTF-8

latin1_content.decode('latin1').encode('utf8')