我的脚本存在编码问题。这是我的剧本:
def parse_airfields():
html = urlopen('https://www.sia.aviation-civile.gouv.fr/aip/enligne/FRANCE/AIRAC-2015-09-17/html/eAIP/FR-AD-1.3-fr-FR.html').read()
html = html.decode('utf-8')
soup = BeautifulSoup(html, 'lxml')
# A lot of work [....]
return airfields
if __name__ == '__main__':
airfields = parse_airfields()
for airfield in airfields:
for value in airfield.values():
if isinstance(value, str):
value.encode('utf-8')
with open('airfields.json', 'w') as airfields_file:
json.dump(airfields, airfields_file, indent=4, sort_keys=True)
我尝试了没有encode()
而没有decode()
,但我有相同的结果......我的JSON文件中的编码问题:
为什么?谢谢你的帮助!
答案 0 :(得分:1)
str.encode
和bytes.decode
不会修改适当的值;你没有指定value.encode('utf-8')
的返回值,所以你实际上没有改变任何东西。当然,我不认为你真的想; json
模块使用文本(str
),而不是二进制数据(bytes
)。
问题是严格的JSON通常不会在其字符串中包含非ASCII字符;它使用逃逸,例如\u00b0
。如果您告诉它,Python会直接输出utf-8
,只需将ensure_ascii=False
添加到json.dump(...)
来电的参数中。