libiconvの問題
MIRACLE LINUXのSamba国際化プロジェクトページにある「iconvについてに詳しいことは書いてありますが、libiconvにはいくつかの不都合な点があります(といってもlibiconvのせいではない)
ActiveScriptRubyに添付されているiconvも同じ問題を抱えていまして、例えば"~"(チルダ)はSJISでもUS-ASCIIでも同じ値ですが、これをUCS2に変換するとそれぞれ別の文字コードが得られてしまいます。
C:\>type test.rb require 'iconv' str = "~" puts("Target: #{str}") puts "US-ASCII ->UCS-2: 0x%02X%02X" % Iconv.conv('UCS-2', 'US-ASCII', str).unpack('C2') puts "Shift_JIS->UCS-2: 0x%02X%02X" % Iconv.conv('UCS-2', 'Shift_JIS', str).unpack('C2') C;\>ruby test.rb Target: ~ US-ASCII ->UCS-2: 0x007E Shift_JIS->UCS-2: 0x203E
まあ、こんな変換はあまりしないと思うのでいいと思うんですが、Sambaみたいに内部コードとしてUNICODEを使って変換器を他に依存する場合は色々と問題が生じます。MSも独自に変換器実装してますしね…。