【问题标题】:Unescaping Characters in a JSON response stringJSON 响应字符串中的非转义字符
【发布时间】:2011-07-30 03:07:09
【问题描述】:

我发出了一个 JSON 请求,它给了我一个使用 Unicode character codes 的字符串,如下所示:

s = "\u003Cp\u003E"

我想把它转换成:

s = "<p>"

在 Python 中执行此操作的最佳方法是什么?

注意,这与this one 是同一个问题,仅在 Python 中,除了 Ruby。我也在使用Posterous API

【问题讨论】:

    标签: json python-2.7 unicode escaping posterous


    【解决方案1】:

    编辑:原始问题“使用 Python 将字符串中的字符转义”没有说明字符串是编写还是是 read(后来,添加了“JSON 响应”字样,以阐明意图是 read )。

    所以我回答了相反的问题:如何编写 JSON 序列化数据将它们转储到未转义的字符串(而不是从字符串中加载数据)。

    我的用例是从我自己的数据字典生成一个 JSON 文件,但该文件包含转义的非 ASCII 字符。所以我这样做了:

    with open(filename,'w') as jsonfile:
        jsonstr = json.dumps(myDictionary, ensure_ascii=False)
        print(jsonstr)          # to screen
        jsonfile.write(jsonstr) # to file
    

    如果ensure_ascii 为真(默认值),则保证输出所有传入的非ASCII 字符都已转义。如果ensure_ascii 为假,这些字符将按原样输出。

    取自这里:https://docs.python.org/3/library/json.html

    【讨论】:

    • 提醒:我编辑了(哇几乎十年前的)问题,事后诸葛亮,你的回答删除了一些额外的介绍 - 如果你不认为这是,请随时恢复合适!
    • 感谢@ti7 我更愿意澄清这个答案是在您更改原标题之前写的
    【解决方案2】:

    如果数据来自 JSON,json 模块应该已经为您解码了这些转义:

    >>> import json
    >>> json.loads('"\u003Cp\u003E"')
    u'<p>'
    

    【讨论】:

    • 我希望我能将这两个答案都标记为正确。感谢您的帮助!
    • @Spike:如果是JSON输入,这才是真正的正确答案。 Python 字符串文字与 JSON 字符串文字不完全兼容,unicode-escape 可能会为基本多语言平面之外的字符返回错误的结果(JS/JSON 存储为代理项,但 Python 可能不会)。
    【解决方案3】:
    >>> "\\u003Cp\\u003E".decode('unicode-escape')
    u'<p>'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-14
      • 2012-04-18
      • 2014-05-31
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多