无法将mysql中的特殊字符存储到json文件中 - Python

时间:2015-10-26 20:50:57

标签: python mysql json

我有一个从mysql表中获取数据的脚本。表中的一列包含á,é等西班牙语字符,在执行主查询之前,设置utf8输出。

执行查询后,包含上述特殊字符的数据很好,我可以打印出来而不会看到任何不同的内容。但是,我的问题是当我创建一个json文件作为输出并保存文件时,结果数据被编码为unicode而不是西班牙文本。我还尝试在保存json文件时解码mysql和编码的输出,但我仍然在unicode中看到这些特殊字符。

我知道在使用特殊字符之前需要解码 - > unicode,最后如果我想保存数据,则必须对其进行编码。但是,这没有成功。你可以看到我的python脚本的简短版本。

import json
import collections
#Database connection
...
#getting the cursor
cursor = db.cursor()

cursor.execute(' SET NAMES utf8' )
cursor.execute('SELECT * FROM eqs ORDER BY localdate DESC, localtime DESC')
....
master_object= collections.OrderedDict()
for row in rows:
    #adding data within the master_object
j=json.dumps(master_object) # <- Here, I tried enconding the data (master_object,enconding='utf-8') and with in the for loop i decode the string
fo=open('output.json','w')
fo.write(j)
fo.close()

1 个答案:

答案 0 :(得分:0)

您似乎正在使用json编码的字符串创建ASCII编码的json文件,这是存储JSON文件的典型用例。

我想你想要一个UTF-8编码的json文件。为此,请在json编码步骤中设置ensure_ascii=False,以便将utf8编码的字符串直接传递到文件。

这样的事可能适合你。

import json
master_objects = {
    "tomorrow" : "ma\xc3\xb1ana" # UTF-8 encoding, just like what comes from db
}

print master_objects["tomorrow"] # Should print man~ana, only prettier

with open("output.json", "wt") as output_file:
    json.dump(master_objects, output_file, ensure_ascii=False)