5

Python (2.7) に不可思議な Unicode 文字列があり、それを imagemagick などのコマンド ライン プログラムにフィードしたいとします (または、実際には何らかの方法で Pythonから取り出します)。文字列は次のようになります。

  • アドルフォ・ロペス・マテオス
  • スタニスワワ・ワラシェヴィチ
  • ヨルゲン・ヨンソン

したがって、Python では、次のような小さなコマンドを作成できます。

cmd = u'convert -pointsize 24 label:"%s" "%s.png"' % (name, name)

印刷cmdして取得convert -pointsize 24 label:"Jörgen Jönsson" "Jörgen Jönsson.png"し、自分で実行するだけであれば、すべて問題ありません。

しかし、そうするとos.system( cmd )、次のようになります。

ファイル名も台無しになっているので、これは imagemagick の問題ではないことはわかっています。Python がコマンドを os.system に渡すときにコマンドを ascii に変換していることは知っていますが、なぜエンコーディングが間違っているのでしょうか? 各非ASCII文字を2文字として解釈するのはなぜですか? 私が読んだいくつかの記事によると 、 latin-1 としてエンコードされているのに utf-8 として読み取られていることが原因である可能性がありますが、それらの間でエンコードを行ったり来たりしてみましたが、役に立ちません。

置換引数なしで ascii として手動でエンコードしようとすると Unicode 例外が発生しますが、name.encode('ascii','xmlcharrefreplace') を実行すると、次のようになります。

私はアイデアがほとんどないので、誰かがこの特定の種類のエンコーディングの問題を認識し、アドバイスを提供できることを望んでいます。

ありがとう!

4

1 に答える 1

15

代わりにsubprocess.callを使用してください:

>>> s = u'Jörgen Jönsson'
>>> import subprocess
>>> subprocess.call(['echo', s])
Jörgen Jönsson
0
于 2013-01-12T00:39:39.777 に答える