1

私はいくつかの文字列操作を扱っており、それらをデータベースに入れようとしています。次に、これに遭遇しました(ドイツ語だと思います):

Sichere Administration von VoIP-Endgeräten

データベースに入れた後、英語以外の文字が次のようになっていることに気付きました。

Sichere Administration von VoIP-Endger\u00e4ten

データベースから取得して、この文字列を subprocess.Popen() に渡すと、エラーが発生します。

TypeError: execv() arg 2 must contain only strings

私の質問は次のとおりです。これはどのように起こりましたか? また、エンコーディング/デコーディングを学ぶ方法についての参考文献はありますか? ありがとう。

4

1 に答える 1

1

はい、Python Unicode HOWTOを読んでください。エンコードされたユニコードテキストを扱っています。

最初の文字列は UTF-8 データであり、Latin-1 として解釈されます。2 番目の文字列は Unicode 文字列であり、Popen()最初にエンコードせずに渡すことはできません。

>>> print u'\u00e4'  # A unicode escape code for the latin-1 character ä
ä
>>> u'\u00e4'.encode('utf8')  # The same character encoded to UTF-8
'\xc3\xa4'
>>> print u'\u00e4'.encode('utf8').decode('latin1')  # Misinterpreted as Latin-1
ä

.encode()データを に渡す前に、外部プロセスがデータを処理して呼び出すことができるエンコーディングを把握する必要があります.Popen()

于 2012-12-20T21:51:24.990 に答える