這可能是非常簡單的事情,我知道有很多像我這樣的類似案例,但我無法弄清楚如何解決這個問題。我還是比較新的Python。無法在Python中正確編碼JSON文件
問題
我有以下內容的JSON文件(expr.json):
{
"vowel": "a|e|i|o|u|y|ä|ö",
"consonant": "b|c|d|f|g|h|j|k|l|m|n|p|r|s|š|t|v|z|ž"
}
我想壽讀取該文件,並分析它的使用Python的JSON模塊的內容。我想稍後使用re.compile編譯密鑰的值。這裏是我的代碼(main.py):
#!/usr/bin/python
# vim: set fileencoding=utf-8 :
import json
myfile = open('expr.json')
data = myfile.read()
myfile.close()
json_data = json.loads(data)
print json_data # {u'consonant': u'b|c|d|f|g|h|j|k|l|m|n|p|r|s|\u0161|t|v|z|\u017e', u'vowel': u'a|e|i|o|u|y|\xe4|\xf6'}
但是,當我嘗試acceess '元音':
json_data['vowel']
我收到以下錯誤信息:
Traceback (most recent call last):
File "/path to main.py", line 11, in
print json_data['vowel']
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 12: ordinal > not in range(128) [Finished in 0.1s with exit code 1]
的UnicodeDecodeError :'ascii'編解碼器無法解碼位置25中的字節0xc3:序號不在範圍內(128)
什麼有我試圖
1)嘗試使用data.encode調用json.loads之前編碼串( 'UTF-8') =>還是相同的錯誤消息
2)逃逸錯誤產生使用他們的轉義版本的字符(ä,ö):(\ u00E4,\ u00F6)=>沒有錯誤,但是當我嘗試使用re.compile編譯它們時,它們無法按預期工作(與轉義字符不匹配)
3),使用雙反斜槓\\ =>還是相同的錯誤消息
轉義字符我在Mac OSX上使用Python版本2.7.2。我的編輯器是Sublime Text 2,我從編輯器的內置控制檯讀取了值。我來自JavaScript的世界,我沒有同樣的問題。
非常感謝,如果我的問題重複,我非常抱歉!
這不是完整的代碼,讓你的錯誤。 –
Sublime Text是否有某種你用來運行代碼的內置Python解釋器? – Aya
感謝大家幫助我解決這個問題! :)這個解決方案與我最初的想法非常不同。 –