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

时间:2010-05-03 08:14:38

标签: python json unicode utf-8 character-encoding

我总是发现字符集和编码很难理解,在这里我遇到了另一个问题。对于任何不准确之处,我深表歉意。我会尽我所能。

我正在从返回JSON的服务器请求数据。在HTTP标头中,它还返回字符集,如下所示:

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

我正在使用Python中的JSON库来使用json.loads方法加载JSON。当我传递返回的JSON时,它给了我一个Unicode字典。我已经用Google搜索了,我知道JSON应该返回Unicode,因为JavaScript字符串是Unicode对象。如何将JSON加载为UTF-8?我想使用响应头中指定的相同编码。

我已阅读this帖子,但没有帮助。

谢谢。

2 个答案:

答案 0 :(得分:2)

json.loads自动处理以UTF-8传递给它的str,因此,在这种特定情况下,您不必自己担心字符集。 loads已经为您从UTF-8转换为Python的UCS-2 Unicode表示。

除非你有其他理由为什么你真的需要操作原始的UTF-8,你应该感觉很好,即使你传递了str并回到unicode。如果您想确定或者处理不同的字符集,也可以将输入编码指定为loads的第二个参数。

答案 1 :(得分:2)

来自application/json rfc

  

JSON文本应以Unicode编码。默认编码为UTF-8。

     

由于JSON文本的前两个字符始终为ASCII字符[RFC0020],因此可以确定八位字节流是UTF-8,UTF-16(BE还是LE)还是UTF-32(BE)或者LE)通过查看前四个八位字节中的空值模式。

       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。