Python将Unicode转换为可读字符

-1 投票
1 回答
1886 浏览
提问于 2025-04-21 08:16

我正在使用 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 的形式。

撰写回答