gpt4 book ai didi

python - Six.u() 取消转义 HTML 字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:51 24 4
gpt4 key购买 nike

使用Python 2.7。作为 JSON 响应的一部分,API 返回字符串:

<a href="https://about.twitter.com/products/tweetdeck" rel="nofollow">TweetDeck</a>

我正在使用一个内部执行的库:

six.u(json.dumps(s))

json.dumps() 输出为:

'"<a href=\\"https://about.twitter.com/products/tweetdeck\\" rel=\\"nofollow\\">TweetDeck</a>"'

可以使用 json.loads 正确解码此输出

但是对 six.u 的调用给出:

u'"<a href="https://about.twitter.com/products/tweetdeck" rel="nofollow">TweetDeck</a>"'

尝试使用 json.loads 解码该字符串会引发错误。

ValueError: Extra data: line 1 column 11 - line 1 column 86 (char 10 - 85)

看起来对 six.u 的调用未转义 href 值,但我不完全确定如何解决此问题。

最佳答案

six.u() 适用于 unicode 字符串文字,而不是 JSON 输出。您不应该使用它来将 JSON 解码为 Unicode 字符串。

来自 six.u() documenation :

A “fake” unicode literal. text should always be a normal string literal. In Python 2, u() returns unicode, and in Python 3, a string. Also, in Python 2, the string is decoded with the unicode-escape codec, which allows unicode escapes to be used in it.

强调我的

相反,如果使用 Python 2,则解码字符串:

json_string = json.dumps(s)
if hasattr(json_string, 'decode'):
# Python 2; decode to a Unicode value
json_string = json_string.decode('ascii')

或者使用 unicode() 函数并捕获 Python 3 中的 NameError:

json_string = json.dumps(s)
try:
# Python 2; decode to a Unicode value from ASCII
json_string = unicode(json_string)
except NameError:
# Python 3, already Unicode
pass

或在调用 json.dumps() 时将 ensure_ascii 设置为 False:

json_string = json.dumps(s, ensure_ascii=False)

不过,这仍然可以在 Python 2 中返回 str 类型,但前提是输入仅包含 ASCII 数据,因此输出可以安全地与 unicode 混合> 值(value)观。

无论哪种方式,您都可以在 Python 2 和 Python 3 之间获得一致的值; six.u() 解码还将 \uhhhh JSON Unicode 转义序列解码为 Unicode 代码点,而 Python 3 JSON 结果将保持这些不变。通过解码,您可以在 Python 2 和 3 中保留 \uhhhh 序列,通过 ensure_ascii 您可以在两者中获得 Unicode 代码点。

由于这是一个第三方库,我 filed a bug report ;你无法真正从这个错误中恢复过来;您不能在前面插入额外的反斜杠,然后再将其删除,因为您无法将它们与正常的反斜杠区分开来。

关于python - Six.u() 取消转义 HTML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30110934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com