Python将Unicode转换为可读字符
我正在使用 Python 2.7 和 psycopg2 来连接 PostgreSQL 数据库。
我从一个数据源读取了一些数据,这些数据中有像 'Aéropostale'
这样的字符串。然后我把它存储到数据库里。但是在 PostgreSQL 中,它变成了 'A\u00e9ropostale'
。我希望它能以 'Aéropostale' 的形式存储。
我的 PostgreSQL 数据库的编码是 utf-8。
请告诉我如何才能存储实际的字符串 'Aéropostale'。我怀疑问题出在 Python 上。请给我一些建议。
编辑:
这是我的数据源:
response_json = json.loads(response.json())
响应是通过服务调用获得的,内容如下:
print(type(response.json())
>> <type'str'>
print(response.json())
>> {"NameRecommendation": ["ValueRecommendation": [{"Value": "\"Handmade\""}, { "Value": "Abercrombie & Fitch"}, {"Value": "A\u00e9ropostale"}, {"Value": "Ann Taylor"}}]
根据以上数据,我的目标是构建一个包含所有 ValueRecommendation.Value 的列表,并将其存储在 PostgreSQL 的 json 数据类型列中。所以我想存储的 Python 列表是:
py_list = ["Handmade", "Abercrombie & Fitch", "A\u00e9ropostale", "Ann Taylor"]
然后我使用 json.dumps() 将 py_list 转换为 json 格式。
json_py_list = json.dumps(py_list)
最后,为了插入数据,我使用 psycopg2.cursor() 和 mogrify()。
conn = psycopg2.connect("connectionString")
cursor = conn.cursor()
cursor.execute(cursor.mogrify("INSERT INTO table (columnName) VALUES (%s), (json_py_list,)))
正如我之前提到的,使用上述逻辑,像 è 这样的特殊字符字符串被存储为 utf8 字符编码。请找出我的错误。
1 个回答
1
json.dumps
默认会把非ASCII字符进行转义,这样输出的内容可以在不支持Unicode的环境中使用。如果你想关闭这个功能,可以使用:
json_py_list = json.dumps(py_list, ensure_ascii=False)
这样你就会得到UTF-8编码的字节(除非你也改变这个设置,使用 encoding=
),所以你需要确保你的数据库连接使用的是这种编码。
一般来说,这两种形式没有太大区别,因为它们都是有效的JSON格式。即使关闭了 ensure_ascii
,仍然会有一些字符被编码成 \u
的形式。