Python 3kは文字列とバイトを厳密に区別しているため、配列sys.argvのコマンドライン引数は文字列として表示されます。引数をバイトとして扱う必要がある場合があります。 Unixで特定の文字エンコーディングにする必要のないパスを渡すときに使用します。sys.argvをPythonのバイト数3k
例を見てみましょう。簡単なPythonの3Kプログラムargv.py
は次のとおりです。
import sys
print(sys.argv[1])
print(b'bytes')
を、期待される出力生成python3.1 argv.py français
として実行されている場合:
français
b'bytes'
注意引数がが私のロケールのエンコーディングであるフランセことを。我々は別のエンコーディングに引数を渡すときしかし、我々は、エラーを取得:python3.1 argv.py `echo français|iconv -t latin1`
Traceback (most recent call last):
File "argv.py", line 3, in <module>
print(sys.argv[1])
UnicodeEncodeError: 'utf-8' codec can't encode character '\udce7' in position 4: surrogates not allowed
はどのようにして、コマンドライン引数を経由してのPython 3Kプログラムにバイナリデータを合格しなければなりませんか?使用法の例は、他のロケールを使用するユーザーのファイルにパスを渡すことです。あなたはエンコーディングは、引数としてそれを使用するか、またはbytes(sys.argv[1], 'latin-1')
を呼び出す知っていれば、
sys.argv[1].encode()
のか:
エンコードの問題として自動検出、「UTF-8」と仮定して回避するために、コマンドライン引数を使ってバイナリデータを渡す例です。 – Nope