获取 json 的请求的编码问题

问题描述 投票:0回答:1

我想用这个代码获取法国各省的地形:

import pandas as pd
import requests

link_dep = 'https://code.highcharts.com/mapdata/countries/fr/fr-all-all.topo.json'
topo = requests.get(link_dep).json()
x = topo['objects']['default']['geometries']
xx = [y for y in x if y['type'] in ['Polygon', 'MultiPolygon']]
df = pd.json_normalize(xx)

但是,对于

df.loc[26, 'properties.name']
,我得到的是“Deux-Sčvres”而不是“Deux-Sèvres”。对于“ô”或“é”

,不会出现此问题

我知道这是一个编码问题,但我不知道如何稍微修改我的代码以在第一步获得正确的编码?

python json highcharts
1个回答
0
投票

JSON 响应包含 Unicode 字符 \u010d,其打印为 č。对于 è 来说,它必须是 \u00e8。这本身不是编码问题。数据有误。

您可以将“name”值中的 \u010d 替换为 \u00e8,如下所示:

import requests

T = str.maketrans({"\u010d": "\u00e8"})

URL = "https://code.highcharts.com/mapdata/countries/fr/fr-all-all.topo.json"

with requests.get(URL) as response:
    response.raise_for_status()
    data = response.json()
    for g in data['objects']['default']['geometries']:
        p = g["properties"]
        if (name := p.get("name")) is not None:
            p["name"] = name.translate(T)
            print(p["name"])
© www.soinside.com 2019 - 2024. All rights reserved.