【发布时间】: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", "") ?