Mac OSXの濁点・半濁点問題。
濁点をどう扱うか問題。Mac OSXの HFS がUTF-8で保存するんだけど、濁点と文字を別に保存する。
ぜっけい→ せ゛っけい とくべつれっしゃ→とくへ゛つれっしゃ
のように保存する。正しいとか悪いとか別にどうでもいいんだ。コレはコレで有りだと思うし。選択肢が多いのはいいことだし。
けど。文字列一致検索で引っかからなかったり、正規表現で掛からなかったりするのが困る。。。そういうのは、OS側でサポートしてほしいなと思うんだけど、サポートしてないからなんとかするしかない。
変換するコマンド 作った
rubyでぱぱっと濁点を直すように書き換えた。
utf8-mac-normalize
#!/usr/bin/env ruby if ARGV.size > 0 then ARGV.each{|e| str = "#{e}" puts str.encode!("utf-8", "utf-8-mac") } else STDIN.each_line { |line| puts line.encode!("utf-8", "utf-8-mac") } end
これで簡単にできる。
コマンドの使い方
ls の結果をフィルタリングする。
ls | ./utf8-mac-normalize
find コマンドと組み合わせて
find -mtime 2 -exec ./utf8-mac-normalize {} \;
などと出来る。
ファイルを名を正規化して、濁点を修正するには
ファイル名を正規化する場合は
for i in $(ls /path/to/dir ) ; do mv "$i" "$(utf8-mac-normalize $i )" ; done ;
などとヤって一括してファイル名を揃える。ただし、空白を含むファイル名などには for だけでは対応できないのでIFSか、findを使う。
ファイル名に空白が含まれる場合。
IFS=$'\n' for i in $(ls ./ ) ; do mv "$i" "$( utf8-mac-normalize $i )" ; done ;
find/xargs は back quote とともに使えないっぽいので見送り
あれ?iconv を使わないの?
iconvコマンドは環境によって、手に入るてにはいらないかわからないじゃん?てかインストール面倒だし。。。
iconv の場合は次のようにする
ls | iconv -f utf-8-mac -t utf-8
iconv が NFD に非対応だったので、今回rubyにした。
私のDebianは非対応だった・・・くっそ
ちなみに UTF8-MAC って?
正式名称じゃないです。慣用的に使われているやつです。 MSの932をShfit-JISと読んでる様な感じでしょうね。
HFS/HFS+ のファイルシステムで使われているので、 UTF-8-HFS と呼ばれることもあるようです。
だから、ファイル名
で主に登場します。気にしすぎは禁物、ブログ投稿画面とかでチェック必要ないからね。
2016-08-02
コマンドのミスを加筆修正