【问题标题】:Python3 saving JSON with unicode single quote [duplicate]Python3用unicode单引号保存JSON [重复]
【发布时间】:2020-07-03 05:29:29
【问题描述】:

我知道之前在 Stackoverflow 和其他网站上已经问过这个问题,但我似乎无法使用转义的 Unicode 字符 (Python3) 保存 JSON 文件。我已经阅读了很多教程。

我错过了什么?我尝试了很多东西,但没有任何效果。我也尝试过在 UTF-8 中编码/解码,但我显然遗漏了一些东西。

为了清楚起见,我已经设法让它适用于其他字符,例如 й (0439),但我在编码单引号时遇到了问题..

如果我有以下字典:

import json
data = {"key": "Test \u0027TEXT\u0027 around"}

我想将它完全保存在一个新的 JSON 文件中,但无论我做什么,它总是以单个字符结束,这是用 Unicode 编码的。

以下 2 个块打印完全相同的内容:{"key": "Test 'TEXT' around"}。

print(json.dumps(data))
print(json.dumps(data, ensure_ascii=False))

有没有办法保留 Unicode 字符串文字?我想把那个字符串作为一个值:“Test \u0027TEXT\u0027 around”

【问题讨论】:

  • 这个 JSON 是由外部源生成的,所以当我导入自己的数据时,它可能会崩溃,因为它可能无法按原样使用单引号。
  • 任何声称支持 JSON 的工具都必须能够同时处理 "Test \u0027TEXT\u0027 around""Test 'TEXT' around"。这两种变体是等价的。如果您想强制执行\u0027 表示法,您必须使用您自己的实现编写并注册一个JSONEncoder 子类来序列化JSON 字符串。或者在json.dumps的结果上使用str.replace(),但是这样很丑。
  • 是的,替换方法很丑陋,但可以满足我的需求(在这种情况下非常具体)。即使使用原始字符串,我仍然无法使其正常工作。

标签: python json python-3.x unicode ascii


【解决方案1】:

您所描述的行为与 JSON 无关。这就是 Python 3 处理字符串的简单方式。打开shell并写:

>>> "Test \u0027TEXT\u0027 around"
"Test 'TEXT' around"

如果您不希望 Python 解释特殊字符,您应该使用原始字符串(甚至可能是字节序列):

>>> r"Test \u0027TEXT\u0027 around"
'Test \\u0027TEXT\\u0027 around'

参考:

【讨论】:

  • 不,当然不是。请参阅参考资料以更好地理解该概念:docs.python.org/2.0/ref/strings.html
  • 哦,当然。我想表明的是 OP 可能担心错误的事情(json 转储与 python 中的转义序列)。
  • 我发现我专注于错误的事情,我知道我需要使用原始字符串,但它似乎仍然是一个杂项,因为它似乎在我的字符串中添加了一个额外的反斜杠。
  • 不幸的是,确实如此。这是您既可以将值存储为字符串并防止转义序列被解释的唯一方法。
猜你喜欢
  • 2019-12-26
  • 2015-11-15
  • 2020-09-29
  • 2021-10-26
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
相关资源
最近更新 更多