Python を使って文字コード変換

先の投稿 で iconv を使いましたが、 Windows 環境では導入されていませんし、導入するには面倒です。
一方、Mercurial は Python で記述されているのでフィルターだって Python で記述すれば良いのではないかと思い、初めて Python でコードを書きました。cp932 から utf-8 へ変換するコードです。

#!/usr/bin/python

import sys

ifn = sys.argv[1]
ofn = sys.argv[2]

open(ofn, 'wb').write(open(ifn, 'rb').read().decode('cp932').encode('utf-8'))

実質一行。 cp932 のテキストファイルを読み込んで、 utf-8 へ変換して出力します。エラー処理なしですが、これだけで済んでしまうのですね。

標準入出力にしなかったのは http://mercurial.selenic.com/wiki/EncodeDecodeFilter に Windows の場合は Tempfile を使った方が良いと書いてあったからです。


この Python スクリプトを使って hgrc を記述しました。
[encode]
**.cpp = tempfile: encode.py INFILE OUTFILE
**.c = tempfile: encode.py INFILE OUTFILE
**.h = tempfile: encode.py INFILE OUTFILE

[decode]
**.cpp = tempfile: decode.py INFILE OUTFILE
**.c = tempfile: decode.py INFILE OUTFILE
**.h = tempfile: decode.py INFILE OUTFILE

decode.py は上のコード、encode.py は decode.py の逆の変換 (utf-8 から cp932 へ)を行うコードです。 Windows 環境下では逆向きの変換を行えば良いでしょう。

以上です。おつかれさまでした。


コメント

このブログの人気の投稿

バイナリーファイルを C 言語の配列で出力