我总是发现字符集和编码很难理解,在这里我遇到了另一个问题。对于任何不准确之处,我深表歉意。我会尽我所能。
我正在从返回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帖子,但没有帮助。
谢谢。
答案 0 :(得分:2)
json.loads
自动处理以UTF-8传递给它的str
,因此,在这种特定情况下,您不必自己担心字符集。 loads
已经为您从UTF-8转换为Python的UCS-2 Unicode表示。
除非你有其他理由为什么你真的需要操作原始的UTF-8,你应该感觉很好,即使你传递了str
并回到unicode
。如果您想确定或者处理不同的字符集,也可以将输入编码指定为loads
的第二个参数。
答案 1 :(得分:2)
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。