问题:
用python原生json解析 urllib2.urlopen返回的对象失败。
代码:
url = "https://www.baidu.com"
data = urllib2.urlopen(url)
json.load(data)
错误:
No JSON object could be decoded
这是接手了一个现成的项目,在本机搭环境时出现的问题。
参考下面文章,可能是因为windows下,对于UTF-8编码默认都是带BOM的,
而Python中Json库不支持带BOM的UTF-8。
参考文章
然后有几点疑问想请教大家:
1.urllib2.urlopen获取的对象确实是可以用json.load解析的么?
2.urllib2.urlopen获取对象时能否直接指定编码为utf8去BOM呢?
3.有什么方式可以是windows的UTF8编码默认去BOM么?
La possibilité d'analyser l'objet obtenu par urllib2.urlopen avec json.load dépend du fait que les données renvoyées par le serveur sont au format json correct. Par exemple, vous pouvez vérifier si le type de contenu renvoyé par. la requête est application/json
BOM est utilisé pour identifier le format d'encodage lors du stockage de fichiers, en particulier lorsque l'encodage UTF-16 est utilisé pour indiquer si l'ordre des octets d'encodage est big-endian ou small-endian. UTF-8 lui-même ne nécessite pas de nomenclature. L'encodage renvoyé par la requête est spécifié par le jeu de caractères dans le type de contenu, tel que Content-Type : application/json=utf-8
L'ajout d'un en-tête de nomenclature à un fichier codé en UTF8 dépend de l'éditeur que vous utilisez. Différents éditeurs ont des méthodes de configuration différentes.