[英]python unable to load a json file with utf-8 encoding
使用以下python代碼:
filePath = urllib2.urlopen('xx.json')
fileJSON = json.loads(filePath.read().decode('utf-8'))
xx.json如下所示:
{
"tags": [{
"id": "123",
"name": "Airport",
"name_en": "Airport",
"name_cn": "機場",
"display": false
}]
}
我看到以下異常:
fileJSON = json.loads(filePath.read().decode('utf-8'))
File "/usr/lib64/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib64/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
該代碼在將漢字添加到json文件之前起作用,同時我還在read()后面也添加了.decode('utf-8')。
我不確定需要做什么?
$ wget https://s3.amazonaws.com/wherego-sims/tags.json
$ file tags.json
tags.json: UTF-8 Unicode (with BOM) text, with CRLF line terminators
該文件以字節順序標記(EF BB BF)開頭,在JSON( JSON規范和BOM / charset-encoding的用法 )中是非法的。 您必須首先在Python中使用'utf-8-sig'
對其進行解碼,以獲取有效的JSON Unicode字符串。
json.loads(filePath.read().decode('utf-8-sig'))
對於它的價值,在這種情況下,Python 3(您應該使用)會給出特定的錯誤,並指導您處理此格式錯誤的文件:
json.decoder.JSONDecodeError:意外的UTF-8 BOM(使用utf-8-sig解碼):第1行第1列(字符0)
也就是說,通過指定您希望丟棄的材料明細表(如果存在的話)(再次,在UTF-8中使用它是不常規的,特別是對於始終以UTF-8編碼的JSON,這比沒有用的情況更糟):
>>> import json
>>> json.load(open('tags.json', encoding='utf-8-sig'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.