バイトオーダーについてメモ
KconvはBOMなしUTF16を既定でビッグエンディアン(BE)とみなします。
Windows(Intel)はリトルエンディアン(LE)なので,BOMなしUTF16(LE)のデータを読み込み,SJIS変換する場合は,
str = "\xff\xfe" + str
のようにLEのBOMを付加するか,Uconvを使って
require 'uconv' str = Uconv.u16swap(str)
または,
str = str.unpack('n*').pack('v*')
のようにバイトオーダーを入れ替えてから変換する必要があります。
puts str.kconv(Kconv::SJIS, Kconv::UTF16)