Ruby を使って,漢字コードの変換を行うプログラム例を示す.
※ nkf を用いて半角カナを全角に変換, 全角数字を半角に変換するプログラムについては,別の Web ページ で説明している.
【要点】
【Ruby バージョン 1.9 系列の String::encode に関する情報】
【NKF の主要なオプション】
【ソースコード】
「-m0」を入れているのは,nkf の機能である MIME 文字列のデコードを抑止したいため.
#! ruby -Ks # coding: windows-31j require 'pp' require 'nkf' def windows31j_to_utf8(s) # Windows-31J から UTF-8 (Byte Order Mark; BOM 無し) へ変換 # nkf については http://www.ruby-lang.org/ja/man/html/nkf.html if ( RUBY_VERSION < "1.9" ) return NKF::nkf( '-Swm0', s ) else # Ruby 1.9 では入力が "Windows-31J" かどうかは気にしない(自動判別機能を信じることにする) return s.encode("UTF-8") end end def utf8_to_windows31j(s) # UTF-8 から Windows-31J へ変換 # nkf については http://www.ruby-lang.org/ja/man/html/nkf.html if ( RUBY_VERSION < "1.9" ) return NKF::nkf( '-Wsm0', s ) else # Ruby 1.9 では入力が "UTF-8" かどうかは気にしない(自動判別機能を信じることにする) return s.encode("Windows-31J") end end if __FILE__ == $0 # 半角カナ print windows31j_to_utf8 "コンニチハ\n" print utf8_to_windows31j windows31j_to_utf8 "コンニチハ\n" # 「"① ② I Ⅱ ㍉ ㌢ ㈱"」は Shift_JIS にはなく,Shift_JIS を拡張した文字コードセットである Windows-31J にある print windows31j_to_utf8 "① ② I Ⅱ ㍉ ㌢ ㈱\n" print utf8_to_windows31j windows31j_to_utf8 "① ② I Ⅱ ㍉ ㌢ ㈱\n" # 「"‖ 〜 − ¢ £ ¬ " 」は Shift_JIS, EUC-JP, ISO-2022-JP では同じ文字コードなのに Windows-31J では違う文字コード print windows31j_to_utf8 "‖ 〜 − ¢ £ ¬ \n" print utf8_to_windows31j windows31j_to_utf8 "‖ 〜 − ¢ £ ¬ \n" # Shift_JIS では 2 バイト目が「5C」になっているもの print windows31j_to_utf8 "表 十 構\n" print utf8_to_windows31j windows31j_to_utf8 "表 十 構\n" # その他 print windows31j_to_utf8 "〒\n" print utf8_to_windows31j windows31j_to_utf8 "〒\n" end
【実行結果の例】
※ Ruby バージョン 1.8 以下では,UTF-8 への変換において NKF を使う.このとき,半角カナは全角カナに変換されるように設定していることに注意(必要ならプログラムを書き換えてください).
※ 下記の実行結果において,Windows-31J しか表示できないコンソールを使っているので,UTF-8 はうまく表示できない(のは当然)