【问题标题】:Replace special unicode characters with normal letters用普通字母替换特殊的 unicode 字符
【发布时间】:2020-03-16 16:04:48
【问题描述】:

在我的 JSON 数据中,有特殊的 Unicode 字符,如 "\u00E0"、"\u00FB" 等。我想用普通字母替换所有这些字符。例如,"\u00E0""à""\u00FB""û"。有很多这样的角色,所以我会找到他们的列表。

我已经尝试用

替换它
dictData.encode('utf-8').decode('unicode_escape') 

dictData.replace("\u00E0", "à").replace("\u00E4", "ä").replace("\u00E2", "â").replace("\u00E7", "ç").replace("\u00E8", "è").replace("\u00E9", "é").replace("\u00EA", "ê").replace("\u00EB", "ë").replace("\u00EE", "î").replace("\u00EF", "ï").replace("\u00F4", "ô").replace("\u00F6", "ö").replace("\u00F9", "ù").replace("\u00FB", "û").replace("\u00FC", "ü").replace("\u00FC", "ù").replace("\u00FB", "û").replace("\u00FC", "î").replace

但两者都不起作用。这是我的代码

import re, sys
from urllib.request import urlopen
import json

patternScript = re.compile("""<script>window\.\_\_WEB\_CONTEXT\_\_\=\{pageManifest:(.*?)\};</script>""", re.DOTALL)

with urlopen("https://www.tripadvisor.ch/Hotel_Review-g188113-d228146-Reviews-Coronado_Hotel-Zurich.html") as response:
    source = str(response.read())
    dictData = patternScript.search(source).group(1).replace('\\ "', '\\"').replace('\\"', '\"').replace("\'", "\\'")
    dictData2 = dictData.encode('utf-8').decode('unicode_escape')
    #dictData2 = dictData.replace("\u00E0", "à").replace("\u00E4", "ä").replace("\u00E2", "â").replace("\u00E7", "ç").replace("\u00E8", "è").replace("\u00E9", "é").replace("\u00EA", "ê").replace("\u00EB", "ë").replace("\u00EE", "î").replace("\u00EF", "ï").replace("\u00F4", "ô").replace("\u00F6", "ö").replace("\u00F9", "ù").replace("\u00FB", "û").replace("\u00FC", "ü")

    jsonData = json.loads(dictData2)

这是 JSON 数据的示例:

[{'long': 'Z\\u00FCrich, Schweiz', 'text': 'Lieber Gast\\n\\nDanke f\\u00FCr die nette R\\u00FCckmeldung zu Ihrem Aufenthalt im Hotel Coronado.  Sch\\u00F6n, konnten Sie die Tramstation Milchbuck gleich gegen\\u00FCber des Hotels, mit  direkten Verbindungen ins Stadtzentrum und zum Flughafen Z\\u00FCrich f\\u00FCr sich nutzen.\\n\\nWir freuen uns auf Ihren n\\u00E4chsten Aufenthalt und verbleiben mit\\n\\nHerzlichen Gr\\u00FCssen \\n\\nOlivia Olgiati\\n\\n'}]

你有什么建议吗?提前谢谢!

【问题讨论】:

  • 如果我运行您的 'unicode_escape' 尝试(在将单引号替换为双引号之后),我会通过删除换行符来使其工作,这就是它报告失败的原因。
  • 所以,首先你运行 dictData = patternScript.search(source).group(1).replace('\\ "', '\\"').replace('\\"', '\"').replace("\'", "\\'") 然后类似 dictData2 = dictData.decode('unicode_escape').replace("\n", "") ?

标签: python json unicode


【解决方案1】:

希望它对你有用:

with urlopen("https://www.tripadvisor.ch/Hotel_Review-g188113-d228146-Reviews-Coronado_Hotel-Zurich.html") as response: 
    source = response.read()
    dictData = patternScript.search(source.decode("utf-8")).group(1)
    jsonData = json.loads(dictData)

【讨论】:

  • 感谢您的回答!对我来说 .decode("unicode_escape")
  • @alise 我认为这种替换不是一个好主意,所以如果我的示例对您有用,那么对于您将使用您的脚本的每个人都会更好:)
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2018-11-13
相关资源
最近更新 更多