Python UnicodeDecodeError读取JSON文件

Python UnicodeDecodeError读取JSON文件,python,json,python-3.x,Python,Json,Python 3.x,下面是给我错误的代码的一部分 # get all browser products raw_json_file = open( script_dir + "raw_json.js", 'r' ) raw_json = raw_json_file.read() all_str = raw_json[ raw_json.find("{"): ] all_obj = json.loads(all_str) browser_products = all_obj["categories"]["6"]["p

下面是给我错误的代码的一部分

# get all browser products
raw_json_file = open( script_dir + "raw_json.js", 'r' )
raw_json = raw_json_file.read()
all_str = raw_json[ raw_json.find("{"): ]
all_obj = json.loads(all_str)
browser_products = all_obj["categories"]["6"]["products"]
我在这里得到的错误如下:

C:\Python34>python parse.py 8.3.4
argument is 8.3.4
Traceback (most recent call last):
  File "parse.py", line 42, in <module>
    raw_json = raw_json_file.read()
  File "C:\Python34\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 563011: character maps to <undefined>
C:\Python34>python parse.py 8.3.4
参数是8.3.4
回溯(最近一次呼叫最后一次):
文件“parse.py”,第42行,在
raw_json=raw_json_file.read()
文件“C:\Python34\lib\encodings\cp1252.py”,第23行,解码
返回编解码器.charmap\u解码(输入、自身错误、解码表)[0]
UnicodeDecodeError:“charmap”编解码器无法解码位置563011:字符映射到的字节0x90
请告诉我如何解决此错误。

当您在Python 3中使用
open()
时,默认情况下,它将假定该文件是以某种系统默认方式编码的,在您的情况下,它显示为Windows
cp1252
编码。也许文件实际上是以其他方式编码的,例如非常常见的
UTF-8

你可以试试

raw_json_file = open( script_dir + "raw_json.js", 'r', encoding='utf8' )

要查看是否是这样,但实际上您需要询问提供文件的人他们使用了什么编码。

最好的方法是尝试对utf-8进行编码和解码

# get all browser products
raw_json_file = open( script_dir + "raw_json.js", 'r' )
raw_json = bytes(raw_json_file.read()).decode()
all_str = raw_json[ raw_json.find("{"): ]
all_obj = json.loads(all_str)
browser_products = all_obj["categories"]["6"]["products"]
#Do this to the strings you get from the JSON file directly. Then, use them as needed. 
计算机可以为某些字符指定不同的代码和值,其中一个代码集是
unicode
。但是,这些字符串不是普通字符串,因此在使用它们之前必须在Python中转换它们。请尝试查看以获取更多信息

此外,您的文件不是JSON文件,而是用于开发网站的JavaScript编程语言文件。如果您未提交,请确认您的文件的有效性。如果文件是你自己做的,那你就不用担心了。更改扩展名只是告诉计算机使用什么程序打开文件的一种方式

牢记 当我执行
decode()
时,它会自动从
utf-8
特性中解码。如果您不知道文件的编码是什么,请尝试使用pip安装
chardet
模块,并参阅用法教程。一旦发现编码(有时,如果文件使用不同的字符集,chardet将不起作用,您必须将所有编码更改为一种统一编码),请将其作为字符串参数添加到
decode()


对不起,如果这一切似乎压倒性的,但有很多人谁有这个错误。只需在谷歌上搜索并找到解决方案:)。

您是否使用正确的映射创建了JSON。JSON Python,就像这样。object==dict,array==list,string==unicode,number(int)==int long,number(real)=float,true==true,false==false,null==None。
js
文件是javascript
json
是一个json文件。