读取JSON文件的UnicodeDecodeError

时间:2015-08-08 14:32:36

标签: 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"]["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>

请告诉我如何解决此错误。

2 个答案:

答案 0 :(得分:2)

在Python 3中使用jQuery(document).ready(function(){ jQuery(".test-popup-link").click(function(e) { var overlay = jQuery('<div align="center" id="overlay"><img id="imgBig" src="" /></div>'); overlay.appendTo(document.body); //jQuery('#overlay').load(this.href); var imgs = (this.href); jQuery('#overlay #imgBig').attr("src", imgs); // assign `click` event to `img` element having `src` set to `imgs` jQuery("img[src=" + imgs + "]").on("click", function() { // do stuff // e.g., remove or hide the overlay div $(this).parent().remove(); }); return false; }); }); 时,默认情况下会假定文件是在某些系统默认情况下编码的,在您的情况下,它是 Windows open() 编码。也许该文件实际上是以其他方式编码的,例如非常常见的 cp1252 。 你可以尝试

UTF-8

看看是否如此,但实际上你需要询问提供文件的人是谁使用的。

答案 1 :(得分:0)

执行此操作的最佳方法是尝试编码并解码为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中进行转换。请尝试查看This Article以获取更多信息。

此外,您的文件不是JSON文件,而是用于开发网站的JavaScript编程语言文件。如果您没有成功,请确认您的文件的有效性。如果您自己制作文件,那么您不必担心。更改扩展名只是告诉计算机用于打开文件的程序的一种方法。

保持心情

当我decode()时,它会自动从utf-8特征解码。如果您不知道文件的编码是什么,请尝试使用pip安装chardet模块,并参阅chardet documentation了解用法教程。一旦你发现(有时,如果你的文件使用不同的字符集,chardet将无法工作,你将不得不将所有编码更改为一个统一编码)编码,请将其作为字符串参数添加到decode()

很抱歉,如果这一切看起来势不可挡,但很多人都有这个错误。只是google它,找到解决方案:)。