Twitterをterminalで見ていると、ごく稀に変な文字が入っているtweetがあって、それがUTF-8-MACだとgeta6に教わった。
Macだと「ぱぴぷぺぽ」など一部の日本語をファイル名にすると変な事が起こるのだが、それの原因がUTF-8-MACらしい。

そういう文字をDBに保存するとのちのち良くないので、Rubyで変換した。
Iconv使ったら簡単だった。


■例

touch ぱぴぷぺぽ
echo は<309a>ひ<309a>ふ<309a>へ<309a>ほ<309a>
となる。


ただし、TerminalやiTerm2で「ぱぴぷぺぽ」をechoやlsしてもふつうに「ぱぴぷぺぽ」になってしまって、Rubyに渡して変換を試せない。
GNU Screen上でechoやlsするとUTF-8-MACの文字を出力できる。

■Rubyで変換
インストール
brew install iconv
gem install iconv


標準入力を全て普通のUTF-8に変換する
convert-macutf.rb
require 'rubygems'
require 'iconv'

ARGF.each do |line|
puts line
puts Iconv.iconv("UTF-8", "UTF-8-MAC", line)
end


screen起動してから
touch ぱぴぷぺぽ
ls | ruby -Ku convert-macutf.rb
結果
convert-macutf.rb
convert-macutf.rb
ぱÿぴÿぷÿぺÿぽÿ
ぱぴぷぺぽ



iconv単体で使う時はこう
ls | iconv -f UTF-8-MAC -t UTF-8