それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Mac の文字化けする日本語の文字(濁点)を一括して文字コード変換する

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

コマンドのミスを加筆修正

参考資料

http://tama-san.com/utf-8-mac_1/

http://blog.sarabande.jp/post/78293914880