簡體   English   中英

python無法使用utf-8編碼加載json文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM