【发布时间】:2013-06-12 19:30:28
【问题描述】:
这可能是一件非常简单的事情,我知道在 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']
我收到以下错误消息:
Traceback(最近一次调用最后一次):
文件“/path to main.py”,第 11 行,在
打印 json_data['元音']
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 12: ordinal > not in range(128) [0.1s 完成,退出码 1]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 25: ordinal not in range(128)
我尝试了什么
1) 在调用 json.loads 之前尝试使用 data.encode('utf-8') 对字符串进行编码 => 还是一样的错误信息
2) 使用转义版本导致字符 (ä, ö) 的转义错误:(\u00E4, \u00F6) => 没有错误,但是当我尝试使用 re.compile 编译它们时,它们不能按预期工作(确实与转义字符不匹配)
3) 使用双反斜杠转义字符 \\ => 还是一样的错误信息
我在 Mac OSX 上使用 Python 2.7.2 版。我的编辑器是 Sublime Text 2,我已经从编辑器的内置控制台中读取了这些值。我来自 javascript 的世界,我没有同样的问题。
提前谢谢你,如果我的问题重复,我非常抱歉!
编辑 1:添加了 Sublime Text 控制台给出的完整错误消息。
【问题讨论】:
-
这不是给你这个错误的完整代码。
-
Sublime Text 是否有某种内置的 Python 解释器来运行代码?
-
感谢所有帮助我解决这个问题的人! :) 结果证明解决方案与我最初想象的完全不同。