3

argparseのドキュメントには、ファイル引数のデフォルトが 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) システムでは、このコードは<stdin> <stdout>ascii コーデックで生成されます。たとえば、出力ストリームに中国語やスカンジナビアの文字が含まれている場合、端末では問題なく表示されますが、stdout をファイルにリダイレクトすると、ASCII コーデック エラーが発生します。誰かがこれを回避するルートを見つけましたか?

(Python コードから直接 utf-8 ファイルを書き込むことは問題ではありません。私は を使用していますcodecs.open(str_path, "w", 'UTF-8'))

4

1 に答える 1

0

あなたはPython 3のドキュメントを読んでいます。ここでPython 2を試してください。

また、アプリでsetlocale()を呼び出す必要がある場合もあります。

于 2012-11-19T13:49:45.683 に答える