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"
し、自分で実行するだけであれば、すべて問題ありません。
- アドルフォ・ロペス・マテオス.png
- 例 1 http://4u.jeffcrouse.info/stackoverflow/A-01.png
- Stanisława Walasiewicz.png
- 例 2 http://4u.jeffcrouse.info/stackoverflow/A-02.png
しかし、そうするとos.system( cmd )
、次のようになります。
- Adolfo López Mateos.png
- 例 4 http://4u.jeffcrouse.info/stackoverflow/B-01.png
- Stanisława Walasiewicz.png
- 例 5 http://4u.jeffcrouse.info/stackoverflow/B-02.png
ファイル名も台無しになっているので、これは imagemagick の問題ではないことはわかっています。Python がコマンドを os.system に渡すときにコマンドを ascii に変換していることは知っていますが、なぜエンコーディングが間違っているのでしょうか? 各非ASCII文字を2文字として解釈するのはなぜですか? 私が読んだいくつかの記事によると 、 latin-1 としてエンコードされているのに utf-8 として読み取られていることが原因である可能性がありますが、それらの間でエンコードを行ったり来たりしてみましたが、役に立ちません。
置換引数なしで ascii として手動でエンコードしようとすると Unicode 例外が発生しますが、name.encode('ascii','xmlcharrefreplace') を実行すると、次のようになります。
- 例 4 http://4u.jeffcrouse.info/stackoverflow/C-01.png
- 例 5 http://4u.jeffcrouse.info/stackoverflow/C-02.png
私はアイデアがほとんどないので、誰かがこの特定の種類のエンコーディングの問題を認識し、アドバイスを提供できることを望んでいます。
ありがとう!