json 即使从UTF-8解码后,Python字符串中仍有UTF-8字符?

lh80um4z  于 2022-11-19  发布在  Python
关注(0)|答案(2)|浏览(230)

我正在将部分XHTML转换为JSON对象。我最终得到了JSON形式的所有内容,但一些UTF-8字符代码被打印出来了。例如:

{
  "p": {
    "@class": "para-p",
    "#text": "I\u2019m not on Earth."
  }
}

这应该是:

{
  "p": {
    "@class": "para-p",
    "#text": "I'm not on Earth."
  }
}

这只是UTF-8代码的一个例子。我如何才能通过字符串并将UTF-8代码的每个示例替换为它所代表的字符呢?

sgtfey8w

sgtfey8w1#

\u2019不是UTF-8字符,而是Unicode转义码。它是有效的JSON,通过json.load读回时将变为(右单引号)。
如果要写入实际字符,请使用ensure_ascii=False来防止为非ASCII字符写入转义码:

with open('output.json','w',encoding='utf8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
yjghlzjz

yjghlzjz2#

您没有粘贴代码,所以我不知道您是如何将XHTML转换为JSON的。我假设您在Python对象中以十六进制值字符结束。这个\u2019是一个具有16位十六进制值的单个字符。默认情况下JSON模块可以处理这个问题。例如,json.loads方法可以解决这个问题:

x = '''{
  "p": {
    "@class": "para-p",
    "#text": "I\\u2019m not on Earth."
  }
}'''

print(x)
x_json=json.loads(x)
print(x_json)

输出显示:

{
  "p": {
    "@class": "para-p",
    "#text": "I\u2019m not on Earth."
  }
}

{'p': {'@class': 'para-p', '#text': 'I’m not on Earth.'}}

相关问题