libiconvの問題

MIRACLE LINUXSamba国際化プロジェクトページにある「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も独自に変換器実装してますしね…。