Python json.dumps编码问题:MongoDB无法存储UTF-8可读JSON字符串
问题分析与解决
错误原因
- 默认转义非ASCII字符:
json.dumps(jsoninfo)默认开启ensure_ascii=True,会把所有非ASCII字符转成\uXXXX格式的转义序列,所以你看到的是转义后的字符串,而非原始UTF-8字符。 - 错误编码为bytes对象:调用
.encode("utf-8")会把字符串转换成bytes类型(表现为b'...'),MongoDB会将bytes对象识别为二进制数据存储,而非普通字符串。
正确实现方式
直接使用json.dumps并设置ensure_ascii=False,不需要额外编码,得到的UTF-8格式字符串可以直接存入MongoDB:
placedict = { "id": geonames.geonames_id, "info": json.dumps(jsoninfo, ensure_ascii=False) }
原理说明
- Python 3中的
str类型本身就是Unicode编码,json.dumps(jsoninfo, ensure_ascii=False)会生成包含原始UTF-8字符的字符串,而非转义序列。 - MongoDB的Python驱动(如pymongo)会自动处理字符串的编码存储,直接存入
str类型即可,无需手动转成bytes。
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

