json.loads 错误:“utf-8”编解码器无法解码位置 0 的字节 0x83:无效的起始字节

Posted

技术标签:

【中文标题】json.loads 错误:“utf-8”编解码器无法解码位置 0 的字节 0x83:无效的起始字节【英文标题】:json.loads Error: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte 【发布时间】:2021-07-10 21:55:16 【问题描述】:

突然间,我开始收到来自此 URL 的 JSON 响应的解码错误:

https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&dataType=product

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte
Unicode error hint
The string that could not be encoded/decoded was: �� ��

我找不到任何不符合 UTF-8 的字符。

Python 3.8:

import json
import requests

url = "https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&dataType=product"

headers = 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
              'application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9',
    'Connection': 'keep-alive',
    'Host': 'stockx.com',
    'TE': 'Trailers',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/89.0.4389.128 Safari/537.36'


my_response = requests.get(url, headers=headers)

if my_response.ok:
    j_data = json.loads(my_response.content)

    print(j_data)
            

注意,my_response.encoding 返回 'utf-8'

【问题讨论】:

我可以确认我可以解析来自该 URL 的响应(不同的语言,不同的操作系统,但 JSON 似乎不是问题) 我也尝试过并为我工作! @Everett,更像是当我直接访问编码时是“内容编码br”。所以唯一的区别就是环境! 【参考方案1】:

从我的测试来看,“Accept-Encoding”标头似乎将其强制转换为不可读的字节。如果您希望以纯文本形式发出请求,只需删除此标头并打印 my_response.text,否则,只需学习如何处理您请求的编码

【讨论】:

【参考方案2】:

从标题中删除Accept-Encoding。此外,您可以在响应对象上使用.json() 方法:

import json
import requests


url = "https://stockx.com/api//browse?productCategory=sneakers&sort=featured&order=DESC&_search=CQ4227-030&dataType=product"

headers = 
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,"
    "application/signed-exchange;v=b3;q=0.9",
    # "Accept-Encoding": "gzip, deflate, br",   # <--- remove the Accept-Encoding header
    "Accept-Language": "en-US,en;q=0.9",
    "Connection": "keep-alive",
    "Host": "stockx.com",
    "TE": "Trailers",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/89.0.4389.128 Safari/537.36",


my_response = requests.get(url, headers=headers)
if my_response.ok:
    j_data = my_response.json()
    # j_data = json.loads(my_response.content)
    print(json.dumps(j_data, indent=4))

打印:


    "Pagination": 
        "limit": 40,
        "page": 1,
        "total": 1,
        "lastPage": "/api/v3/browse?_search=CQ4227-030&dataType=product&order=DESC&productCategory=sneakers&sort=featured&page=1",
        "sort": [
            "featured"
        ],
        "order": [
            "DESC"
        ],
        "currentPage": "/api/v3/browse?_search=CQ4227-030&dataType=product&order=DESC&productCategory=sneakers&sort=featured",
        "nextPage": null,
        "previousPage": null
    ,
    "Facets": 
        "year": 
            "2021": 1
        ,
        "brand": 
            "Jordan": 1
        ,
        "gender": 
            "men": 1
        ,
        "dataType": 
            "product": 1
        ,
        "releaseTime": 
            "1610064000": 1
        ,
        "market.featured": 
            "0": 1
        ,
        "productCategory": 
            "sneakers": 1
        ,
        "market.lowestAsk": 
            "144": 1
        ,
        "market.highestBid": 
            "170": 1
        ,
        "market.volatility": 
            "0.190516": 1
        ,
        "market.pricePremium": 
            "-0.206": 1
        ,
        "market.deadstockSold": 
            "359": 1
        ,
        "market.changePercentage": 
            "-0.046667": 1
        ,
        "market.salesLast72Hours": 
            "5": 1
        ,
        "market.lastLowestAskTime": 
            "1618144284": 1
        ,
        "market.lastHighestBidTime": 
            "1618029125": 1
        ,
        "market.averageDeadstockPrice": 
            "158": 1
        
    ,
    "Products": [
        
            "id": "d1e93a15-3b48-431f-a98d-6f0b0ca80135",
            "uuid": "d1e93a15-3b48-431f-a98d-6f0b0ca80135",
            "brand": "Jordan",
            "breadcrumbs": [],
            "category": "Air Jordan 35",
            "charityCondition": 0,
            "childId": null,
            "colorway": "Black/Fire Red-Reflective Silver",
            "condition": "New",
            "countryOfManufacture": "CN",
            "dataType": "product",
            "description": "",
            "hidden": false,
            "listingType": "standard",
            "minimumBid": 25,
            "gender": "men",
            "doppelgangers": [],
            "media": 
                "imageUrl": "https://images.stockx.com/images/Air-Jordan-XXXV-Bred-Product.jpg?fit=fill&bg=FFFFFF&w=700&h=500&auto=format,compress&trim=color&q=90&dpr=2&updated_at=1615910682",
                "smallImageUrl": "https://images.stockx.com/images/Air-Jordan-XXXV-Bred-Product.jpg?fit=fill&bg=FFFFFF&w=300&h=214&auto=format,compress&trim=color&q=90&dpr=2&updated_at=1615910682",
                "thumbUrl": "https://images.stockx.com/images/Air-Jordan-XXXV-Bred-Product.jpg?fit=fill&bg=FFFFFF&w=140&h=100&auto=format,compress&trim=color&q=90&dpr=2&updated_at=1615910682",
                "gallery": [],
                "hidden": false
            ,
            "name": "Bred",
            "productCategory": "sneakers",
            "releaseDate": "2021-01-08",
            "releaseTime": 1610064000,
            "belowRetail": true,
            "retailPrice": 180,
            "shoe": "Jordan XXXV",
            "shortDescription": "Air-Jordan-XXXV-Bred",
            "styleId": "CQ4227-030/CQ4228-030",
            "tickerSymbol": "JB-JOXBBF",
            "title": "Jordan XXXV Bred",
            "traits": [
                
                    "name": "Style",
                    "value": "CQ4227-030/CQ4228-030",
                    "filterable": true,
                    "visible": true,
                    "highlight": true
                ,
                
                    "name": "Colorway",
                    "value": "Black/Fire Red-Reflective Silver",
                    "filterable": true,
                    "visible": true,
                    "highlight": true
                ,
                
                    "name": "Retail Price",
                    "value": 180,
                    "filterable": true,
                    "visible": true,
                    "highlight": false
                ,
                
                    "name": "Release Date",
                    "value": "2021-01-08",
                    "filterable": true,
                    "visible": true,
                    "highlight": false
                
            ],
            "type": 0,
            "urlKey": "air-jordan-xxxv-bred",
            "year": 2021,
            "shoeSize": null,
            "market": 
                "productId": 0,
                "skuUuid": "",
                "productUuid": "d1e93a15-3b48-431f-a98d-6f0b0ca80135",
                "lowestAsk": 144,
                "lowestAskSize": "10.5",
                "parentLowestAsk": 0,
                "numberOfAsks": 148,
                "hasAsks": 1,
                "salesThisPeriod": 5,
                "salesLastPeriod": 0,
                "highestBid": 170,
                "highestBidSize": "15",
                "numberOfBids": 96,
                "hasBids": 1,
                "annualHigh": 305,
                "annualLow": 88,
                "deadstockRangeLow": 116,
                "deadstockRangeHigh": 170,
                "volatility": 0.190516,
                "deadstockSold": 359,
                "pricePremium": -0.206,
                "averageDeadstockPrice": 158,
                "lastSale": 143,
                "lastSaleSize": "8.5",
                "salesLast72Hours": 5,
                "changeValue": -7,
                "changePercentage": -0.046667,
                "absChangePercentage": 0.046667,
                "totalDollars": 56819,
                "lastLowestAskTime": 1618144284,
                "lastHighestBidTime": 1618029125,
                "lastSaleDate": "2021-04-15T13:38:23+00:00",
                "createdAt": "2021-01-06T19:31:31+00:00",
                "updatedAt": 1618495984,
                "deadstockSoldRank": 29,
                "pricePremiumRank": 96,
                "averageDeadstockPriceRank": 86,
                "featured": 0
            ,
            "_tags": [
                "sneakers",
                "jordan",
                "air jordan",
                "35",
                "release_date|2021-01-08",
                "colorway|black/fire red-reflective silver",
                "retail_price|180",
                "style_id|cq4227-030/cq4228-030"
            ],
            "lock_selling": false,
            "selling_countries": [
                "AD",
                "AE",
                "AG",
                "AL",
                "AR",
                "AS",
                "AT",
                "AU",
                "BA",
                "BB",
                "BE",
                "BG",
                "BH",
                "BM",
                "BR",
                "BS",
                "BW",
                "BZ",
                "CH",
                "CL",
                "CN",
                "CO",
                "CR",
                "CY",
                "CZ",
                "DE",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "FI",
                "FJ",
                "FO",
                "GD",
                "GE",
                "GF",
                "GI",
                "GL",
                "GP",
                "GR",
                "GT",
                "GU",
                "HK",
                "HN",
                "HR",
                "HU",
                "ID",
                "IE",
                "IL",
                "IS",
                "JM",
                "JO",
                "JP",
                "KE",
                "KN",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LC",
                "LI",
                "LS",
                "LT",
                "LU",
                "LV",
                "MA",
                "MC",
                "MO",
                "MP",
                "MQ",
                "MT",
                "MU",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NC",
                "NI",
                "NL",
                "NO",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PH",
                "PL",
                "PR",
                "PW",
                "QA",
                "RE",
                "RO",
                "RS",
                "SA",
                "SC",
                "SE",
                "SG",
                "SI",
                "SK",
                "SN",
                "SV",
                "TC",
                "TH",
                "TW",
                "UY",
                "VA",
                "VE",
                "VI",
                "VN",
                "ZA",
                "IT",
                "PT",
                "CA",
                "FR",
                "GB",
                "GG",
                "JE",
                "ES",
                "US",
                "IN"
            ],
            "buying_countries": [
                "AD",
                "AE",
                "AG",
                "AI",
                "AL",
                "AM",
                "AO",
                "AR",
                "AS",
                "AT",
                "AU",
                "AW",
                "BA",
                "BB",
                "BE",
                "BF",
                "BG",
                "BH",
                "BI",
                "BJ",
                "BM",
                "BO",
                "BR",
                "BS",
                "BT",
                "BW",
                "BY",
                "BZ",
                "CH",
                "CI",
                "CK",
                "CL",
                "CM",
                "CN",
                "CO",
                "CR",
                "CV",
                "CY",
                "CZ",
                "DE",
                "DJ",
                "DK",
                "DM",
                "DO",
                "DZ",
                "EC",
                "EE",
                "ER",
                "ET",
                "FI",
                "FJ",
                "FO",
                "GD",
                "GE",
                "GF",
                "GI",
                "GL",
                "GM",
                "GN",
                "GP",
                "GR",
                "GT",
                "GU",
                "GW",
                "GY",
                "HK",
                "HN",
                "HR",
                "HU",
                "ID",
                "IE",
                "IL",
                "IS",
                "JM",
                "JO",
                "JP",
                "KE",
                "KG",
                "KH",
                "KI",
                "KM",
                "KN",
                "KR",
                "KW",
                "KY",
                "KZ",
                "LA",
                "LC",
                "LI",
                "LK",
                "LS",
                "LT",
                "LU",
                "LV",
                "MA",
                "MC",
                "ME",
                "MG",
                "MH",
                "MK",
                "ML",
                "MN",
                "MO",
                "MP",
                "MQ",
                "MR",
                "MS",
                "MT",
                "MU",
                "MV",
                "MW",
                "MX",
                "MY",
                "MZ",
                "NC",
                "NE",
                "NF",
                "NG",
                "NI",
                "NL",
                "NO",
                "NP",
                "NZ",
                "OM",
                "PA",
                "PE",
                "PF",
                "PG",
                "PH",
                "PL",
                "PR",
                "PW",
                "PY",
                "QA",
                "RE",
                "RO",
                "RS",
                "RW",
                "SA",
                "SB",
                "SC",
                "SE",
                "SG",
                "SI",
                "SK",
                "SL",
                "SN",
                "SR",
                "ST",
                "SV",
                "SZ",
                "TC",
                "TD",
                "TG",
                "TH",
                "TJ",
                "TM",
                "TN",
                "TO",
                "TV",
                "TW",
                "TZ",
                "UA",
                "UG",
                "UY",
                "VA",
                "VC",
                "VE",
                "VG",
                "VI",
                "VN",
                "VU",
                "WF",
                "WS",
                "YE",
                "YT",
                "ZA",
                "ZM",
                "ZW",
                "AZ",
                "BN",
                "CD",
                "CG",
                "EG",
                "FM",
                "GA",
                "IT",
                "MD",
                "NA",
                "PT",
                "RU",
                "SM",
                "TR",
                "TT",
                "CA",
                "FR",
                "GB",
                "GG",
                "JE",
                "ES",
                "US",
                "XK",
                "IN"
            ],
            "objectID": "d1e93a15-3b48-431f-a98d-6f0b0ca80135"
        
    ]

【讨论】:

以上是关于json.loads 错误:“utf-8”编解码器无法解码位置 0 的字节 0x83:无效的起始字节的主要内容,如果未能解决你的问题,请参考以下文章

创建 smtp() 时出现 Python smtplib 错误:“utf-8”编解码器无法解码字节

python JSON

Python3 JSON 数据解析

python3_json模块详解

Python3快速入门——Python3 JSON

无返回时处理 JSON 解码错误