対象: 文字コードを変換するRubyで文字コードを変換するにはKconvライブラリを用いるのが最も簡単だろう。kconvをrequireすると、任意のStringオブジェクトに対してtoutf8、toeuc、及びtosjis等の文字コード変換メソッドが使用できるようになる。 require "kconv" $KCODE = "UTF8" s1 = "abc:123 日本語のテキスト".toeuc # EUCに変換 p Kconv.guess(s1) # s1がEUCの場合は2 p s1.toutf8 # 文字コードを自動判定してUTF-8に変換 p Kconv.toutf8(s1) # このように書くこともできる ただし、toメソッドではinvalid encodingでうまく変換できない場合が往々にしてある。これはkconvメソッドでin_code引数にKconv::AUTOを指定した(あるいはin_codeを指定しない)場合も同じであるから、toutf8とkconv(Kconv::UTF8, Kconv::AUTO)は恐らく等価なのだろう。 require "kconv" $KCODE = "UTF8" s1 = "abc:123 日本語のテキスト".toeuc # EUCに変換 p s1.kconv(Kconv::UTF8) # invalid encodingになる p Kconv.kconv(s1, Kconv::UTF8) # 上と等価 p s1.kconv(Kconv::UTF8, Kconv.guess(s1)) # これだとうまくいく場合がある 同じkconvメソッドを使う場合でも、in_code引数にKconv::AUTOではなく、guessメソッドの戻り値を渡すと自動変換がうまくいく場合があるのこれを利用してみるのも手だろう。 更に文字コードの変換方法を詳細に指定したい場合はNKFライブラリを用いる方法もある。変換元の文字コードと変換先の文字コードが予め分かっている場合は、それをnkfメソッドのオプションで指定して変換を行う。NKF.guess1メソッドで文字コードの判定をすることもできる。 require "nkf" $KCODE = "UTF8" s1 = NKF.nkf("-e", "abc:123 日本語のテキスト") if NKF.guess(s1) == NKF::EUC p "EUC" p NKF.nkf("-Ew", s1) # オプションは1つにまとめられる end nkfメソッドで指定できる主なオプションは以下である。
library nkf (2010/07/09)
Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]
|