0

私は初心者で、過去に同様の質問があったと確信していますが、答えを見つけたり理解したりするのに苦労しています。辛抱強くお待ちいただきありがとうございます!

そこで、utf-8 でエンコードされた入力ファイルの行を読み取り、その一部をユーザーから渡されたオプションのコマンド ライン引数と比較し、一致する場合はその行に何かを実行するスクリプトを作成しようとしています。出力ファイルに出力する前に。私はcodecsファイルを開くために使用しています。

現在、このモジュールを使用してargparseコマンド ライン引数を解析しています。ファイル内の行はあらゆる種類の言語で記述できるため、コマンド ライン引数も utf-8 である必要があります。

例えば:

ファイルの行は次のようになります。

разъедают {. r ax z . j je . d ax1 . ju t .}

スクリプトは、コマンド ラインから次のように呼び出す必要があります。

>python myscript.py mytextfile.txt -grapheme ъ

これが、処理を行うはずの私のコードの一部です。この場合、orthはキリル文字でgraphemeあり、キリル文字です。

def process_orth(orth, grapheme):
    grapheme = grapheme.decode(sys.stdin.encoding).encode('utf-8')
    if (grapheme in orth):
        print 'success, your grapheme was: ' + grapheme.encode('utf-8')
        return True
    else:
        print 'failure, your grapheme was: ' + grapheme.encode('utf-8')
        return False

残念ながら、書記素が確実に存在する場合でも、関数は false を返し、書記素の代わりに疑問符を出力します。

failure, your grapheme was: ?

私が読んだ他の投稿の推奨に従って、最初に次を追加しようとしましたprocess_orth()が、うまくいかなかったようです:

grapheme.decode(sys.stdin.encoding).encode('utf-8')

だから私の質問は...

コマンドラインから utf-8 文字列を Python スクリプトに渡すにはどうすればよいですか? また、Windows7でこれに余分な癖はありますか(そして、cygwinをインストールすると何かが変わりますか)?

4

1 に答える 1

3

を使用して入力ファイルを開く場合は、エンコードされたデータではなくcodecs.open()、Unicode データがあります。UTF-8 に再度エンコードするのではなく、単にデコードする必要があります。grapheme

grapheme = grapheme.decode(sys.stdin.encoding)
if grapheme in orth:
    print u'success, your grapheme was: ' + grapheme
    return True

Unicode も出力することに注意してください。通常print、現在のコードページに対して Unicode 値が再度エンコードされます。Windows コンソールの印刷は難しいことで知られているため、これでも失敗する可能性があります。 http://wiki.python.org/moin/PrintFailsを参照してください。

残念ながら、sys.argvWindows では、Python が非ユニコード対応のシステム コールを使用するため、明らかに文字化けしてしまう可能性があります。Unicode対応の代替手段については、「Windows 上の Python 2.x でコマンド ライン引数から Unicode 文字を読み取る」を参照してください。

Unicode 入力で問題が発生する理由はわかりませんargparseが、問題が発生した場合は、いつでも から Unicode 出力を取得しwin32_unicode_argv()て UTF-8 にエンコードしてから に渡すことができargparseます。

于 2013-05-24T23:34:05.150 に答える