UTF-8 解码不解码 python 中的特殊字符

UTF-8 decoding doesn't decode special characters in python

您好,我有以下来自 API.

的数据(抽象)
"Product" : "T\u00e1bua 21X40"

我正在使用以下代码解码数据字节:

var = json.loads(cleanhtml(str(json.dumps(response.content.decode('utf-8')))))

cleanhtml 是我创建的正则表达式函数,用于从返回的数据中删除 html 标记(它工作正常)。虽然,decode(utf-8) 并没有删除像 \u00e1 这样的字符。我的预期输出是:

"Product" : "Tábua 21X40"

我尝试使用 replace("\u00e1", "á") 但没有成功。怎么替换这种类型的字符,这是什么类型的字符?

\u00e1 是显示 Python 字符串内容时表示 á 字符的另一种方式。

如果您打开 Python 交互式会话和 运行 print({"Product" : "T\u00e1bua 21X40"}),您将看到 {'Product': 'Tábua 21X40'} 的输出。 \u00e1 作为单独的字符不存在于字符串中。

\u 转义序列表示后面的数字指定一个 Unicode 字符。

尝试用 á 替换 \u00e1 不会有任何效果,因为它已经是这样了。此外,replace("\u00e1", "á") 试图替换斜杠、u 等的各个字符,并且如前所述,它们实际上并不以这种方式存在于字符串中。

如果您进一步解释您遇到的问题,那么我们可能会提供更多帮助,但目前听起来字符串的内容正确,只是显示方式与您预期的不同。

这是什么类型的角色

这里

"Product" : "T\u00e1bua 21X40"

你可能会观察到 \u escape sequence,它后面跟着 4 个十六进制数字:00e1,请注意,这是相同字符的不同 表示,所以

print("\u00e1" == "á")

产出

True

这些类型的字符称为字符实体。有不同类型的实体,这是 JSON 个实体。为了演示,输入您的字符串 here 并单击 unescape。 对于你的问题,如果你正在使用 python 那么你可以通过导入 json 模块来解决问题。然后你必须按如下方式对其进行解码。

import json

string = json.loads('"T\u00e1bua 21X40"')
print(string)