我有一个简单的程序,它加载一个包含有趣字符的 .json 文件。该程序(见下文)在终端中运行良好,但在 IntelliJ 中出现此错误:
UnicodeDecodeError:“ascii”编解码器无法解码位置 2 中的字节 0xe2:序数不在范围内(128)
关键代码是:
with open(jsonFileName) as f:
jsonData = json.load(f)
如果我将 open 替换为:
with open(jsonFileName, encoding='utf-8') as f:
然后它适用于 IntelliJ 和终端。我对 Python 和 IntelliJ 插件还是新手,我不明白它们为什么不同。我认为sys.path
可能会有所不同,但输出让我认为这不是原因。有人可以解释一下吗?谢谢!
版本:
- 操作系统:Mac OS X 10.7.4(也在 10.6.8 上测试过)
- Python 3.2.3(v3.2.3:3d0686d90f55,2012 年 4 月 10 日,11:25:50)/Library/Frameworks/Python.framework/Versions/3.2/bin/python3.2
- IntelliJ:11.1.3 终极版
文件 (2):
1. unicode-error-demo.py
#!/usr/bin/python
import json
from pprint import pprint as pp
import sys
def main():
if len(sys.argv) is not 2:
print(sys.argv[0], "takes one arg: a .json file")
return
jsonFileName = sys.argv[1]
print("sys.path:")
pp(sys.path)
print("processing", jsonFileName)
# with open(jsonFileName) as f: # OK in Terminal, but BUG in IntelliJ: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 2: ordinal not in range(128)
with open(jsonFileName, encoding='utf-8') as f: # OK in both
jsonData = json.load(f)
pp(jsonData)
if __name__ == "__main__":
main()
2. 编码-temp.json
["™"]