escapize.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import os
import re
def convert(n):
if not n: return
f = open(n,'r')
data = f.read()
f.close()
d = False
a = ''
for c in data:
if ord(c) >= 0x80:
d = True
a += u'\\x%0X' % (ord(c))
else:
a += c
if d:
print n
f = open(n,'w')
f.write(a.encode('sjis'))
f.close()
def rec_exec(func,p):
if not func: return
for n in os.listdir(p):
f = os.path.join(p,n)
if os.path.isfile(f):
if re.search( '\.(h|c)$', n ):
func(f)
elif os.path.isdir(f):
rec_exec(func,f)
rec_exec(convert,'.')
0x80 以上の文字コードを16進数表記エスケープシーケンスに置き換えていくだけです。そのソースのフォルダに置いて、この Python スクリプトを実行すれば、再帰的にファイルを見つけて変換してくれます。
欠点として、ソースの日本語が読めなくなってしまいます。そのため変換しない原版を別に残しておかないといけません。逆変換のスクリプトを作るという手もありますが、これこそ面倒なので作りません。
とにかく、これで Windows 版の Open Jtalk で UTF-8 版の辞書も使えるようになりました。