【问题标题】:Load JSON in Python as header character set在 Python 中加载 JSON 作为标头字符集
【发布时间】:2011-02-14 22:58:48
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    除非您有其他原因确实需要对原始 UTF-8 进行操作,否则您应该感觉良好,即使您传入 str 并返回 unicodes。如果您想确定或处理不同的字符集,您还可以将输入编码指定为 loads 的第二个参数。

    【讨论】:

      【解决方案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。

      【讨论】:

        猜你喜欢
        • 2016-04-18
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多