python - windows下,能否直接指定编码为utf8去BOM呢?

查看:175
本文介绍了python - windows下,能否直接指定编码为utf8去BOM呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

问题:

用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么?

解决方案

  1. urllib2.urlopen获取的对象能否用json.load解析取决于服务器返回的数据是否为正确的json格式,比如可以查看请求返回的content-type是否为application/json

  2. BOM是文件存储时的用来识别编码格式的,特别是UTF-16编码时用来表示编码的字节序是big-endian还是little-endia。UTF-8本身是不需要BOM的。请求返回的编码由content-type中的charset指定,比如Content-Type:application/json; charset=utf-8

  3. UTF8编码的文件是否加BOM头,取决于你使用的编辑器,不同的编辑器有不同的设置方法。

这篇关于python - windows下,能否直接指定编码为utf8去BOM呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆