python - windows下,能否直接指定编码为utf8去BOM呢?
高洛峰
高洛峰 2017-04-17 17:58:10
0
1
413

问题:

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(1)
小葫芦
  1. urllib2.urlopen에서 얻은 객체를 json.load로 구문 분석할 수 있는지 여부는 서버에서 반환한 데이터가 올바른 json 형식인지 여부에 따라 다릅니다. 예를 들어 urllib2.urlopen에서 반환된 콘텐츠 유형을 확인할 수 있습니다. 요청은 application/json

  2. 입니다.
  3. BOM은 파일을 저장할 때 인코딩 형식을 식별하는 데 사용되며, 특히 UTF-16 인코딩을 사용하여 인코딩 바이트 순서가 빅엔디안인지 리틀엔디아인지 나타내는 경우에 사용됩니다. UTF-8 자체에는 BOM이 필요하지 않습니다. 요청에 의해 반환된 인코딩은 Content-Type: application/json; charset=utf-8

  4. 과 같은 content-type의 문자 세트로 지정됩니다.
  5. UTF8로 인코딩된 파일에 BOM 헤더를 추가할지 여부는 사용하는 편집기에 따라 다릅니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿