rubyのバイト(byte)とunicode(iconvによる符号化変換)
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クラスで