【发布时间】:2020-06-09 14:39:33
【问题描述】:
这个小小的python程序:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import json
import sys
x = { "name":u"This doesn't work β" }
json.dump(x, sys.stdout, ensure_ascii=False, encoding="utf8")
print
在终端运行时生成此输出:
$ ./tester.py
{"name": "This doesn't work β"}
这正是我所期望的。但是,如果我将标准输出重定向到一个文件,它会失败:
$ ./tester.py > output.json
Traceback (most recent call last):
File "./tester.py", line 9, in <module>
json.dump(x, sys.stdout, ensure_ascii=False, encoding="utf8")
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 190, in dump
fp.write(chunk)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u03b2' in position 19: ordinal not in range(128)
但是,直接打印(不带 json.dump)可以重定向到文件:
print u"This does work β".encode('utf-8')
如果stdout不是终端,就好像json包忽略了encoding选项。
如何让 json 包做我想做的事?
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。