すがブロ

sugamasaoのhatenablogだよ

文字コードファッキング

文字コード変換

Ruby に限らずだと思うけど、以下のように、”波ダッシュ”や”全角ダッシュ”のような文字を NKF でUTF-8 にエンコードする際に文字化けする。
環境としては、入力文字は Windows で入力。プログラムの実行は Solaris 10 で行ってる。

require 'nkf'

puts NKF.nkf('-w', '―')

ここで NKF のオプションの --cp932 を追加するとうまく行く。

require 'nkf'

puts NKF.nkf('-w --cp932', '―')

これってSJIS(実態はMS932)を UTF-8 に変換するときのコードポイントのマッピングに問題があるようだけど、例えば上記のスクリプトを記述したファイルのエンコードがSJIS で保存した場合ではなく、 UTF-8 で保存してから実行しても、やはり --cp932 が無いと正しくエンコードされない*1。
これはいったいどういうことだろう。
サイト(http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5など)をいくつか見てみたんだけど、上記のように、MS932→UTF-8 や UTF-8 → UTF-8 で駄目な理由がよくわからない。
っていうか、文字化け関連はもうよくわかんね。もうどうでもいいからUTF-8に統一しようぜ><

*1:Windowsでファイルを作成した場合の話