2015-09-08 54 views
1

我正在嘗試編寫一個腳本,該腳本需要使用json文件pizza-train.json並從列表中的每個字典中提取request_text字段。但即時得到運行下面的代碼時出錯:將python中的json文件解壓縮爲字典

代碼:

import json 

json1_file = open("pizza-train.json", 'r') 
json1_str = json1_file.read() 

json1_data = json.loads(json1_str) 

print(json1_data) 

錯誤:

文件 「C:\ Python34 \ LIB \編碼\ cp1252.py」第19行,在編碼中返回codecs.charmap_encode(input,self.errors,encoding_table)[0]

UnicodeEncodeError:'charmap'編解碼器無法編碼位置字符58765-58767:字符映射到

我已經嘗試了不同的解決方案,如:encoding="UTF-8".encode('utf-8')

任何人都可以解釋我爲什麼它不會打印json1_data

+1

提供完整堆棧跟蹤, 請。 '''print(json1_data)'''line會出現這個錯誤嗎?如果是,那麼您不能在控制檯中打印非Windows1252字符,因爲這是您的控制檯字符集。 – user996142

+0

我得到了該行的錯誤。如何改變他的控制檯字符集? – Anonymous

+0

顯示答案:使用''chcp''。長的答案在下面 – user996142

回答

0

您的數據有一些字符(位置58765-58767),無法用您的字符集(Windows1252)表示。您應該將控制檯切換爲支持它的字符集(在Windows中爲chcp命令)。

這裏是例子:

我有文件:

# coding=utf-8 
print(u"русский текст") # This is russian text (cyrilic chars) 

文件是UTF8本身,所以Python知道,字母 「й」 是西裏爾字母。

但我有代碼頁CP1252沒有這樣的字母(因爲它只有基於拉丁的字符)。

>chcp 
Active code page: 1252 

>python.exe foo.py 
Traceback (most recent call last): 
    File "foo.py", line 2, in <module> 
    print(u"руÑÑкий текÑÑ‚") 
    File "c:\Python27\lib\encodings\cp1252.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_table) 
UnicodeEncodeError: 'charmap' codec can't encode characters in position  0-6: character maps to <undefined> 

我現在我的代碼頁改變爲一個,有字母 「й」 等:

>chcp 1251 
Active code page: 1251 

>c:\Python27\python.exe foo.py 
русский текст 

我可以使用866(這是DOS CYR代碼頁爲好)