LoginSignup
23
23

More than 5 years have passed since last update.

Mac OSXで壊れた濁音ファイル名の一括修正

Posted at

ドキュメント管理をgit等のバージョン管理システムを利用すると便利です。
ただ、日本語ファイル名を扱うときは注意が必要です。

というのも、Macは通常ファイル名では、「ガ」などの濁音を「カ」「"」の2文字を使って内部のデータを表現します。
通称でUTF-8-Macとか呼ばれたりもしますが、独自の文字コードではなく、UTF-8自体のNFD形式の正規化という仕様です。

ちなみにWindowsなどはNFC形式という「ガ」は「ガ」という一つの文字コードで表します。こっちの方が違和感が無いですね。

で、問題になるのが、Macで日本語ファイル名を作ったり、リネームしたりすると漏れ無くNFDで保管されるので、git上でもNFCではなく、NFDで保存されるので、ファイル名がぶっ壊れます。
Windowsも最近はExploreとかは対応してるので、一見はあまり問題ないんですが、一部のツールが正常に動作しなかったりと結構めんどくさい...

1個や2個なら手でちまちま直せば良いんですが、Mac上でrevert commitとかすると、一括してまとめて壊れるので、とてもじゃないけど、手で直せなくなります。

なので、こんなかんじのコードで対応します。

nfd2nfc
    static void parse(File root) {
        for (File f : root.listFiles()) {
            String name = f.toString();
            String nfcName = Normalizer.normalize(name, Normalizer.Form.NFC);

            if (f.isDirectory()) {
                parse(f);
            }

            if(!name.equals(nfcName)){
                System.out.println("rename from " + name + " to " + nfcName);
                f.renameTo(new File(nfcName));
            }
        }
    }

gist:koduki / Nfd2nfc.java

単純にファイル名を再帰的に読み込んで、nfc形式でなければnfcにリネームするというだけのシンプルなプログラムです。

今回はJavaで書きましたが、ちょっと調べてみた感じgoやrubyでも簡単に書けそうです。UTF-8に対応してる最近の言語なら、ライブラリレベルでNormalizationの仕様を持ってる可能性が高いので、対応は簡単です。

それではHappy Hacking!

参考

23
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23