我想用这个代码获取法国各省的地形:
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”。对于“ô”或“é”,不会出现此问题
我知道这是一个编码问题,但我不知道如何稍微修改我的代码以在第一步获得正确的编码?
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"])