rubyのスクリプトの中でif文やprintメソッドで漢字などの全角文字を使うには、Perlと異なりそのままでは文字化けしたり、エラーになって実行できない場合があります。Ruby1.8以前とRuby1.9以降では指定方法が異なりますので、それぞれに応じた対応が必要になります。また、入力ファイルの内容とスクリプトで指定した漢字などの全角文字との比較や照合が必要な場合は、さらに外部エンコーディングと内部エンコーディングに対応する必要があります。こちらについては[3-5-4.外部エンコーディングと内部エンコーディングによる変換]を参照してください。
(1)Ruby1.8以前の場合
Ruby1.8以前の場合は$KCODEを指定します。ここで指定した文字コードとスクリプトの文字コード(エンコード)を一致させておくことが必要です。
$KCODEに関するオプション
オプション | 内 容 |
$KCODE = 'sjis' | スクリプトの文字コードがshift_jisの場合に指定する。 |
$KCODE = 'euc' | スクリプトの文字コードがEUC-JPの場合に指定する。 |
$KCODE = 'utf-8' | スクリプトの文字コードがutf-8の場合に指定する。 |
$KCODEを指定する例
# xxxxxxxx.rb # 内容 : スクリプトの中で漢字を使う # 前提 : ruby1.8以下であること # スクリプトと$KCODEの指定は一致させること # Copyright (c) 2011 Mitsuo Minagawa, All rights reserved. # (minagawa@fb3.so-net.ne.jp) # 使用方法 : c:\>ruby xxxxxxxx.rb # $KCODE = 'sjis' #sjis,euc,utf-8が指定できる in1_file = open("input_sjis.txt","r") out1_file = open("output_sjis.txt","w")
(2)Ruby1.9以降の場合
ruby1.9以降では、$KCODEに文字コードを指定する方法が廃止され、いわゆるマジックコメントをスクリプトの1行目に指定します。マジックコメントとは、スクリプトの文字コードを指定するもので、以下のように指定します。
マジックコメントの指定方法
オプション | 内 容 |
# coding:windows-31j | スクリプトの文字コードがshift_jisの場合に指定する。 |
# coding:euc-jp | スクリプトの文字コードがEUC-JPの場合に指定する。 |
# coding:utf-8 | スクリプトの文字コードがutf-8の場合に指定する。 |
マジックコメントを指定する例
# coding:windows-31j # xxxxxxxx.rb # 内容 : スクリプトの中で漢字を使う # 前提 : ruby1.9以上であること # スクリプトとマジックコメントの指定は一致させること # Copyright (c) 2011 Mitsuo Minagawa, All rights reserved. # (minagawa@fb3.so-net.ne.jp) # 使用方法 : c:\>ruby xxxxxxxx.rb # in1_file = open("input_sjis.txt","r:windows-31j") out1_file = open("output_sjis.txt","w:windows-31j")