在Python中加载JSON作为标题字符集

1 投票
2 回答
1224 浏览
提问于 2025-04-15 22:17

我一直觉得字符集和编码很难理解,这次又遇到了一个新问题。对可能出现的不准确之处我表示歉意,我会尽量做到最好。

我正在从一个服务器请求数据,服务器返回的是JSON格式的数据。在HTTP头信息中,它还返回了字符集,像这样:

Content-Type: text/html; charset=UTF-8

我在用Python的JSON库,通过json.loads方法来加载这个JSON。当我把返回的JSON传给它时,它给我返回了一个Unicode格式的字典。我查了一下,知道JSON应该返回Unicode,因为JavaScript的字符串就是Unicode对象。我想知道怎么才能把JSON加载为UTF-8格式?我希望使用和响应头中指定的编码一样的格式。

我看过这篇帖子,但没有帮助。

谢谢。

2 个回答

2

根据application/json的标准

JSON文本必须使用Unicode编码。默认的编码方式是UTF-8。

因为JSON文本的前两个字符总是ASCII字符,所以我们可以通过查看前四个字节中的空字节模式,来判断这个字节流是UTF-8、UTF-16(大端或小端)还是UTF-32(大端或小端)。

       00 00 00 xx  UTF-32BE
       00 xx 00 xx  UTF-16BE
       xx 00 00 00  UTF-32LE
       xx 00 xx 00  UTF-16LE
       xx xx xx xx  UTF-8

所以,如果你有一个以字节串形式存在的JSON文本,总是可以把它转换成Unicode字符串。而一旦你得到了Unicode字符串,如果需要的话,你可以用任何你喜欢的编码方式把它再转换成字节串。

json.loads()这个函数会使用指定的编码(默认是'utf-8')。如果输入的编码不是基于ASCII的,那么在把文本传给json.loads()之前,应该手动把它转换成Unicode。

2

json.loads 这个函数会自动处理传给它的 UTF-8 格式的字符串,所以在这种情况下,你不需要自己担心字符编码的问题。loads 已经帮你把 UTF-8 转换成了 Python 使用的 UCS-2 Unicode 格式。

除非你有其他特别的原因需要直接操作原始的 UTF-8,否则你可以放心使用,即使你传入的是 str 类型,返回的却是 unicode 类型。如果你想确保输入的编码格式,或者在处理不同的字符编码时,你也可以把输入编码作为 loads 的第二个参数来指定。

撰写回答