这可能是一件非常简单的事情,我知道在 SO 上有很多像我这样的类似案例,但我就是不知道如何解决这个问题。我对 Python 还是很陌生。
问题
我有一个包含以下内容的 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'}
但是当我尝试访问“元音”时:
json_data['vowel']
我收到以下错误消息:
回溯(最近一次通话最后):
文件“/path to main.py”,第 11 行,在
打印 json_data['元音']
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('utf-8') => 调用 json.loads 之前对字符串进行编码 => 仍然是相同的错误消息
2) 使用转义版本导致字符 (ä, ö) 的转义错误:(\u00E4, \u00F6) => 没有错误,但是当我尝试使用 re.compile 编译它们时,它们无法按预期工作(与转义字符)
3) 使用双反斜杠 \\ => 转义字符仍然是相同的错误消息
我在 Mac OSX 上使用 Python 2.7.2 版。我的编辑器是 Sublime Text 2,我已经从编辑器的内置控制台中读取了这些值。我来自 javascript 的世界,我没有同样的问题。
提前谢谢您,如果我的问题重复,我感到非常抱歉!