问题:
用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么?
高洛峰2017-04-17 18:00:10
urllib2.urlopen で取得したオブジェクトを json.load で解析できるかどうかは、サーバーから返されたデータが正しい json 形式であるかどうかによって決まります。たとえば、 によって返された content-type が正しいかどうかを確認できます。リクエストは application/json
BOM は、ファイルを保存するとき、特にエンコードのバイト順がビッグエンディアンであるかリトルエンディアであるかを示すために UTF-16 エンコードが使用されている場合に、エンコード形式を識別するために使用されます。 UTF-8 自体には BOM は必要ありません。リクエストによって返されるエンコードは、Content-Type: application/json
UTF8 でエンコードされたファイルに BOM ヘッダーが追加されるかどうかは、使用するエディターによって設定方法が異なります。