Python从数据库中检索数据,该数据由MySQL中的Latin1_swedish_ci编码

时间:2016-03-23 07:27:10

标签: python mysql utf-8 latin1

我有一个用Latin1_swedish_ci存储文本的数据库。 如果我通过php(在utf-8中编码)从这个数据库中检索数据,我得到了正确的结果

结果如下:

  在南海季风试验(1998年5月至6月)期间在Dungsha coraisland(20°42'N,116°43'E)进行了测量,并进行了校准,并与三个晴空天的辐射传输计算进行了比较。 / p>

然而,当我使用python与mysql连接器时,我得到了错误的结果!

结果如下:

  

在南海季风试验(1998年5月至6月)期间,在Dungsha coraisland(20¢X42 NN,116¢X43'E)测量的向下总太阳通量已经过校准,并与三个辐射传输计算进行了比较晴天。

目前,部分代码如下所示:

cnx = mysql.connector.connect(host ='localhost',user='root', database='tao',charset='utf8',use_unicode='true')
f = io.open("upload.xml",'w',encoding='utf-8')
f.write(row[dic['abs']]+"\n")

有人能帮助我吗?我需要通过Python从数据库中检索所有数据并将它们输出到xml文件

此外,我想知道为什么我可以通过php的回声成功获得正确的结果(20°42'N,116°43'E)?我已经使用mysql>检查了数据。选择...,结果也像20¢X42¡N,116¢X43¡E。

1 个答案:

答案 0 :(得分:1)

糟糕!我想你经历了latin1和big5字符集 3230A2583432A1A64E20¢X42¡¦N的{​​{1}}为十六进制。CHARACETER SET latin1 3230A2583432A1A64E20°42’N的{​​{1}}为十六进制。CHARACETER SET big5 3230C2B03432E280994E20°42’N的{​​{1}}为十六进制,我希望将其保存。

处理latin1和utf8都是一场噩梦。但是把混合物扔到混合物中让我头晕目眩。

mysql的连接愿意将您拥有的任何编码转换为您为表/列所述的任何内容。但你必须正确说明。

认为您有CHARACETER SET utf8个数据,但您声称它是big5