在执行结束时编码问题

时间:2015-09-25 03:56:03

标签: python json python-3.x encoding beautifulsoup

我的脚本存在编码问题。这是我的剧本:

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文件中的编码问题: encoding problem with my json

为什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

str.encodebytes.decode不会修改适当的值;你没有指定value.encode('utf-8')的返回值,所以你实际上没有改变任何东西。当然,我不认为你真的想; json模块使用文本(str),而不是二进制数据(bytes)。

问题是严格的JSON通常不会在其字符串中包含非ASCII字符;它使用逃逸,例如\u00b0。如果您告诉它,Python会直接输出utf-8,只需将ensure_ascii=False添加到json.dump(...)来电的参数中。