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.スクリプトの中で漢字を使う]を参照してください。
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" に変換する
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","航空機部品"