■Windows版Rubyの細道・けもの道

■ナビゲータ

[南北館(最初のメニュー)]

  1. [Windows版Rubyの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
      1. [2-1.基本処理]
        1. [2-1-1.スクリプトの基本形]
        2. [2-1-2.必要な項目だけを出力する]
        3. [2-1-3.条件をつけて出力する]
        4. [2-1-4.スクリプトと入出力ファイルを異なるフォルダに入れる]
        5. [2-1-5.スクリプトの中で漢字を使う]
      2. [2-2.キーブレイク(照合)処理]
      3. [2-3.マッチング(並べ替え)処理]
      4. [2-4.ソート(並べ替え)処理]
      5. [2-5.パターンマッチ処理]
    3. [3.応用編]
    4. [スクリプトと入力データのサンプル]

2.基本編

2-1.基本処理

2-1-5.スクリプトの中で漢字を使う

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") 
    


Copyright (c) 2011-2013 Mitsuo Minagawa, All rights reserved.