使用requests获取JSON的编码问题:法国省份地形数据字符错误
解决法国省份名称字符编码错误问题
问题出在requests.get().json()的自动编码识别逻辑上——这个方法会优先从响应头提取编码,没有的话就用chardet库自动检测,但目标topojson文件的编码没被正确识别,导致è被解析成了č。
直接修改代码,强制指定响应编码为UTF-8再解析JSON即可:
import pandas as pd import requests import json link_dep = 'https://code.highcharts.com/mapdata/countries/fr/fr-all-all.topo.json' response = requests.get(link_dep) # 强制设置UTF-8编码,避免自动识别出错 response.encoding = 'utf-8' topo = json.loads(response.text) 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。
原理很简单:目标文件本身是UTF-8编码,但requests自动检测时误判了编码格式,手动指定response.encoding = 'utf-8'可以强制用正确的编码解码响应内容,从源头解决字符乱码问题。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

