変えて変えて
Mac OS Xを鯖にした場合、文字コードの扱いの関係で『濁点・半濁点』付きの文字の扱いがおかしくなる話は以前書いたが、pythonで変換するスクリプトを組んでみた。
# -*- coding: shift-jis -*- # test prog import sys import os # Dictionary define tb_dakuten = { \ u"が":u"か゛",u"ぎ":u"き゛",u"ぐ":u"く゛",u"げ":u"け゛",u"ご":u"こ゛", \ u"ざ":u"さ゛",u"じ":u"し゛",u"ず":u"す゛",u"ぜ":u"せ゛",u"ぞ":u"そ゛", \ u"だ":u"た゛",u"ぢ":u"ち゛",u"づ":u"つ゛",u"で":u"て゛",u"ど":u"と゛", \ u"ば":u"は゛",u"び":u"ひ゛",u"ぶ":u"ふ゛",u"べ":u"へ゛",u"ぼ":u"ほ゛", \ u"ぱ":u"は゜",u"ぴ":u"ひ゜",u"ぷ":u"ふ゜",u"ぺ":u"へ゜",u"ぽ":u"ほ゜", \ u"ガ":u"カ゛",u"ギ":u"キ゛",u"グ":u"ク゛",u"ゲ":u"ケ゛",u"ゴ":u"コ゛", \ u"ザ":u"サ゛",u"ジ":u"シ゛",u"ズ":u"ス゛",u"ゼ":u"セ゛",u"ゾ":u"ソ゛", \ u"ダ":u"タ゛",u"ヂ":u"チ゛",u"ヅ":u"ツ゛",u"デ":u"テ゛",u"ド":u"ト゛", \ u"バ":u"ハ゛",u"ビ":u"ヒ゛",u"ブ":u"フ゛",u"ベ":u"へ゛",u"ボ":u"ホ゛", \ u"パ":u"ハ゜",u"ピ":u"ヒ゜",u"プ":u"フ゜",u"ペ":u"ヘ゜",u"ポ":u"ホ゜", \ u"ヴ":u"ウ゛" } # main logic c = "" a = sys.argv[1] bn = os.path.basename(a) d = os.path.split(a) b = unicode(bn,'shift-jis') for ix in range(len(b)): try: c += tb_dakuten[b[ix]] except KeyError: c += b[ix] f = d[0] + "\\" + c.encode('shift-jis') os.rename(a,f)
ま、ようするに『ばびぶべぼ.txt』みたいなファイル名を『は゛ひ゛ふ゛へ゛ほ゛.txt』にすると言うことで…
日本語パス名が変換されてから、パス分離に気がついたのは内緒w
早速、修正w
メインロジック以下を、以下のように修正すると、複数ファイル対応(コマンドラインや、py2exeで作ったexeに複数dropの対応)
# main logic for a in sys.argv[1:]: c = "" fl = 0 bn = os.path.basename(a) d = os.path.split(a) b = unicode(bn,'shift-jis') for ix in range(len(b)): try: c += tb_dakuten[b[ix]] fl = 1 except KeyError: c += b[ix] #変換発生なら、リネーム if fl == 1: try: f = d[0] + "\\" + c.encode('shift-jis') os.rename(a,f) except WindowsError: pass #ファイルが無い場合は何もしない
逆変換
をやるには、えーと、
- か行・さ行・た行の文字が来た場合は、次の文字が濁点なら濁点付き文字に変換。
- は行の文字が来た場合は、次の文字が、濁点or半濁点なら、対応した文字に変換。
- カタカナの時も同様に。
- 『ウ゛』が来た場合は、ヴに変換
って言うロジックで良いと思う。ヒットした場合に、文字数を+2するのを忘れない様にw