| [サイトマップへ] |
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"
# 「"@ A I U _ a "」は Shift_JIS にはなく,Shift_JIS を拡張した文字コードセットである Windows-31J にある
print windows31j_to_utf8 "@ A I U _ a 浬n"
print utf8_to_windows31j windows31j_to_utf8 "@ A I U _ a 浬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 はうまく表示できない(のは当然)