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

■ナビゲータ

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

  1. [Windows版Rubyの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
    3. [3.応用編]
      1. [3-1.固定長データとCSVデータとの変換]
      2. [3-2.重複データの処理]
      3. [3-3.フォルダ内の一括処理]
      4. [3-4.1つのファイルを複数のファイルに分割する]
      5. [3-5.文字コードの変換]
        1. [3-5-1.文字コードの変換(kconvライブラリ利用)]
        2. [3-5-2.文字コードの変換(nkfライブラリ利用)]
        3. [3-5-3.文字コードの変換(encode利用)]
        4. [3-5-4.外部エンコーディングと内部エンコーディングによる変換]
      6. [3-6.半角全角変換]
      7. [3-7.多次元配列の処理]
      8. [3-9.その他]
    4. [スクリプトと入力データのサンプル]
Perlではどう処理する?
同じことをPerlではこうしています。

3.応用編

3-5.文字コードの変換

3-5-1.半角カタカナを全角カタカナに変換する(kconvライブラリ利用)

kconvライブラリを使って、文字コードを変換する方法です。

文字コードを変換するだけでなく、半角カタカナは自動的に全角カタカナに変換する点に注意してください(全角カタカナに変換したくない場合は、nkfライブラリを利用した方法で文字コードを変換します)。

なお、項目に含まれる半角スペースは変換されずにそのままになっている点にも注意してください。ただし、半角の「・(なかぐろ)」は全角の「・(なかぐろ)」に変換されます。

実際に応用する場合は、入出力データのファイル名等を変更して、利用します。

【スクリプト】
# kconv.rb  
# 内容 : 入力コード(エンコード)変換と半角カタカナを全角カタカナに変換する       
# Copyright (c) 2011-2015 Mitsuo Minagawa, All rights reserved. 
# (minagawa@fb3.so-net.ne.jp)   
# 使用方法 : c:\>ruby kconv.rb  
#   
require 'kconv' 

# 入力ファイル  
in1_file    =   open("input_sjis.txt","r")  
# 出力ファイル  
out1_file   =   open("output_utf8.txt","w") 

# 主処理    
while   (line1  =   in1_file.gets)  
    line1.chomp!    
#タブ区切りのとき   
#               in1     =   line1.split("\t",-1)    
#カンマ区切りのとき 
#   in1 =   (line1 + ',')   
#           .scan(/"([^"\\]*(?:\\.[^"\\]*)*)",|([^,]*),/)   
#           .collect{|x,y| y || x.gsub(/(.)/, '\1')}    

    line1   =   line1.kconv(Kconv::UTF8,  Kconv::SJIS) # Shift_JIS から utf-8 に変換    

    out1_file.print line1,"\n"      #1行出力する。  

end 

# ファイルのクローズ    
in1_file.close  
out1_file.close 
    

kconvメソッドに記入する変換前と変換後の文字コード(2つの引数)は以下のように指定します(変換後を前、変換前を後に記入しますので、間違えないようにしてください)。

kconvメソッドの変換前と変換後の文字コード(2つの引数)

Kconvの引数 内    容
SJIS 文字コードがshift_jisの場合に指定する。
JIS 文字コードがISO-2022-JP(いわゆるJIS)の場合に指定する。
EUC 文字コードがEUC-JPの場合に指定する。
UTF8 文字コードがutf-8の場合に指定する。
UTF16 文字コードがutf-16の場合に指定する。
ASCII 文字コードがASCIIコード(半角の英数字など)の場合に指定する。
BINARY 文字コードがバイナリの場合に指定する。


また、変数を変換するのではなく、スクリプトに全角文字などを具体的に記入して、変換する場合には、以下のようにすることもできます。

Kconvライブラリのtoで始まるメソッド

メソッド 内    容
tosjis 文字コードをshift_jisに変換する場合に指定する。
tojis 文字コードをISO-2022-JP(いわゆるJIS)に変換する場合に指定する。
toeuc 文字コードをEUC-JPに変換する場合に指定する。
toutf8 文字コードをutf-8に変換する場合に指定する。
toutf16 文字コードをutf-16に変換する場合に指定する。

具体的には、以下のように指定します。"変換したい文字列"に漢字などを指定する場合には、ruby1.8以前であれば、$KCODEを指定し、ruby1.9以降の場合は、マジックコメントを指定します。$KCODEやマジックコメントについては、[2-1-5.スクリプトの中で漢字を使う]を参照してください。

【Kconvライブラリのtoで始まるメソッドの指定方法1】
temp       =   "変換したい文字列"  # 変換したい文字列をセットする

temp_sjis  =   temp.tosjis  # shift_jis に変換する

temp_jis   =   temp.tojis   # ISO-2022-JP (JIS) に変換する

temp_eucjp =   temp.toeuc   # euc-jp に変換する

temp_utf8  =   temp.toutf8  # utf-8 に変換する

temp_utf16 =   temp.toutf16 # "BOM 無し"の "utf-16BE" に変換する
    
【Kconvライブラリのtoで始まるメソッドの指定方法2】
temp_sjis  =   Kconv.tosjis("変換したい文字列")  # shift_jis に変換する

temp_jis   =   Kconv.tojis("変換したい文字列")   # ISO-2022-JP (JIS) に変換するに変換する

temp_eucjp =   Kconv.toeuc("変換したい文字列")   # euc-jp に変換する

temp_utf8  =   Kconv.toutf8("変換したい文字列")  # utf-8 に変換する

temp_utf16 =   Kconv.toutf16("変換したい文字列") # "BOM 無し"の "utf-16BE" に変換する
    
【スクリプトとデータのサンプル】

スクリプトはこちらにあります(必ずshift_jisで保存してください)。

入力データはこちらにあります(必ずshift_jisで保存してください)。

【入力データ】
"0100","ABC","[]@!#$%&<>'()*+,-./ 012345ABCEFGabcefgアイウエオガザダバパヴ"  
"0110","ABC","[]@!#$%&<>'()*+,-./ " 
"0120","ABC","0123456789"   
"0130","ABC","ABCEFGabcefg" 
"0140","ABC","アイウエオガザダバパヴ"    
"0150","ABC","カガ タダヒコ"    
"0160","ABC","スズキ ココロ" 
"0170","ABC","ジョン・スミス" 
"0200","DEF","[]@!#$%&'()*+,−./012345ABCDEFGabcdefgアイウエオガザダバパヴ"
"0210","DEF","[]@!#$%&'()*+,−./ "
"0220","DEF","0123456789"
"0230","DEF","ABCDEFGabcdefg"
"0240","DEF","アイウエオガザダバパヴ"
"0250","DEF","カガ タダヒコ"
"0260","DEF","スズキ ココロ"
"0270","DEF","ジョン・スミス"
"0280","DEF","貸借対照表"
"0290","DEF","航空機部品"
    
【出力データ】
"0100","ABC","[]@!#$%&'()*+,-./ 012345ABCEFGabcefgアイウエオガザダバパヴ"
"0110","ABC","[]@!#$%&'()*+,-./ "
"0120","ABC","0123456789"
"0130","ABC","ABCEFGabcefg"
"0140","ABC","アイウエオガザダバパヴ"
"0150","ABC","カガ タダヒコ"
"0160","ABC","スズキ ココロ"
"0170","ABC","ジョン・スミス"
"0200","DEF","[]@!#$%&'()*+,?./012345ABCDEFGabcdefgアイウエオガザダバパヴ"
"0210","DEF","[]@!#$%&'()*+,?./ "
"0220","DEF","0123456789"
"0230","DEF","ABCDEFGabcdefg"
"0240","DEF","アイウエオガザダバパヴ"
"0250","DEF","カガ タダヒコ"
"0260","DEF","スズキ ココロ"
"0270","DEF","ジョン・スミス"
"0280","DEF","貸借対照表"
"0290","DEF","航空機部品"
    



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