【问题标题】:UTF-8 STDIN+STDOUT with Python ArgParse on "OS X"在“OS X”上使用 Python ArgParse 的 UTF-8 STDIN+STDOUT
【发布时间】:2012-11-07 05:24:14
【问题描述】:

argparse documentation 显示了一种默认为 stdin/stdout 的文件参数的方法,文本编码默认为 utf-8

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
...                     default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
...                     default=sys.stdout)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
          outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)

但是,在此 OS X (10.7.5) 系统上,此代码使用 ascii 编解码器生成 &lt;stdin&gt; &lt;stdout&gt;。例如,如果我的输出流包含中文或斯堪的纳维亚字符,它们将在终端上正常显示,但如果我将标准输出重定向到文件,则会触发 ascii 编解码器错误。有没有人找到绕过这个的路线?

(直接从 Python 代码编写 utf-8 文件不是问题——我使用的是codecs.open(str_path, "w", 'UTF-8')

【问题讨论】:

  • 应该提到我使用的是 Python 2.7

标签: python macos python-2.7 osx-lion argparse


【解决方案1】:

您正在阅读 Python 3 文档。在这里试试Python 2

另外,您的应用可能需要调用setlocale()

【讨论】:

  • 请提供的不仅仅是指向适当答案的链接。
  • 感谢您提供指向正确文档的指针。试过 setlocale() 但我想知道这是否是正确的方向?本地日期/货币问题并没有真正影响,而且我的 UTF-8 流通常包含各种语言的文本,与用户区域设置无关。目标似乎是对编解码器进行更深层次的设置,远离 ascii 默认为 UTF-8
猜你喜欢
  • 1970-01-01
  • 2010-10-21
  • 2011-06-04
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多