機械です。
Python2.3 系を使う際に、どうしても気になるのが日
本語の扱い。
別途日本語コデック (JapaneseCodecs) を使って指定
しないで、コードに2バイトコードが混じってると即エ
ラーとなります。
2.4 系には日本語コデックが付属してきますが、2.3
系には無いので別途インストールする必要がでてきます。
また、2.4 系をポータブルな最小コンポーネントで動
かす時にも不便です。
そこで、コンソールに返り値を表示するのに用いる repr
関数を用いて(悪用して?)2バイトコード部分を全て
アスキー表示に変換するスクリプトを考えてみました。
原理は以下のとおり。
Python インタープリタモードで日本語(今回は Windows
なので SJIS)を打ち込むと、以下のようになります。
>>> s = "print 'こんにちわ'"
>>> s
"print '\x82\xb1\x82\xf1\x82\xc9\x82\xbf\x82\xed'"
>>> print s
print 'こんにちわ'
>>>
最初に s を表示した場合、内部表現を表示するわけで
すが、ここで暗黙的に使われているのが repr 関数です。
repr 関数では、非 ASCII 文字に対しては、上のよう
にコードのエスケープ文字表現に変換されます。
エスケープ文字は、そもそも非 ASCII コードを打ち込
むために使うわけですから、これをそのまま打ち込めば
2バイトコードの文字になるわけです。
こうして表示されるのは文字列ですから、これをファ
イルに打ち出せば、日本語部分だけ変換されたコードの
出来上がり、というわけです。
以下、スクリプトです。
# j2a.py:Japanese to ASCII
import sys
inputFileName = sys.argv[1]
outputFileName = inputFileName[:-3] + 'py'
fi = file(inputFileName)
si = fi.readlines()
fi.close()
so = []
for x in si:
so.append(repr(x)[1:-3]+'\n')
fo = file(outputFileName,'w')
fo.writelines(so)
fo.close()
# end j2a.py
三文字の拡張子を持つファイルを、'filename.py'形式
にして打ち出します。
たとえばこのように使います。
C:\> python j2a.py xxx.txt
すると、コード変換された'xxx.py'が出来上がるとい
う寸法です。
これは、2バイトコードと1バイトコードが混在する
スクリプトでは全て使えますので、結構便利じゃないか
と思います。
もちろん、「P は〜」の連載で使おうと思って作った
んですけどね、ハイ(構想は前からありましたが)
/機械伯爵/必要はプログラムの母/