【问题标题】:UTF-8 decoding doesn't decode special characters in pythonUTF-8 解码不解码 python 中的特殊字符
【发布时间】:2021-09-23 12:05:39
【问题描述】:

您好,我有以下来自 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", "á"),但没有成功。如何替换这种类型的字符,这是什么类型的字符?

【问题讨论】:

    标签: python replace utf-8 decode


    【解决方案1】:

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

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

    \u 转义序列表示以下数字指定 Unicode 字符。

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

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

    【讨论】:

    • 我不知道。我找到了一个可行的解决方案,即在字符代码之前使用 \\\\,这适用于替换,因此 replace("\\\\u00e1", "á")u00e1 替换为 a。也许该帖子应该关闭。
    【解决方案2】:

    这是什么类型的字符

    这里

    "Product" : "T\u00e1bua 21X40"
    

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

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

    输出

    True
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        • 2020-03-05
        • 1970-01-01
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多