rubyのバイト(byte)とunicode(iconvによる符号化変換)

1263 ワード



require 'iconv'
$KCODE='u'

class String
 def String.safe_iconv(str_utf8)
    sentan=""
    koutan= str_utf8.to_s
   while sentan.to_s.size < str_utf8.to_s.size
    begin
       return sentan = sentan.to_s + Iconv.iconv('SHIFT_JIS','UTF-8', koutan)[0]
    rescue Iconv::Failure => e   
       sentan = sentan.to_s + e.success.to_s
       koutan = e.failed.to_s.sub(/^\S/,"?")
    end
  end
  end
end


puts String.safe_iconv("Zörkendörfer ")


上記のコードに$KCODE='u'を追加しないと結果が異なります.
$KCODE
这是Ruby认识的马奇摩托文字列发音.变数的价格是"EUC""SJIS""UTF 8""NONE"之一.
rubyが認識する複合バイト文字列uncoding.「EUC」「SJIS」「UTF 8」「NONEのいずれかを選択できます
$KCODE的价格是"EUC"的时候,假设文字列和正规表现的电子标志是EUC-JP.同样,"SJIS"的时候假设Shift JIS."UTF 8"的时候假设UTF-8."NONE"的时候没有识别马奇摩托文字列.
$KCODEの値が「EUC」の場合文字列と正規表現の復号(uncoding)はEUC-JP方式で仮定する
$KCODEの値が「SJIS」の場合文字列と正規表現の復号(uncoding)はSJIS方式で仮定
$KCODEの値が「NONE」の場合は文字列と正規表現復号(uncoding)がNONE方式で仮定
NONEの場合は複合バイト文字列の復号はできません
また、複合バイトの文字列を認識する方法もあります.ActiveSupportのcharsクラスで