Windows マシンで生成された集計データのテキスト ファイルの処理に問題があります。私はRuby 1.8で作業しています。次の例では、ファイルの 2 行目を処理するときにエラー ("\000" (Iconv::InvalidCharacter)) が発生します。最初の行は正しく変換されます。
require 'iconv'
conv = Iconv.new("UTF-8//IGNORE","UTF-16")
infile = File.open(tabfile, "r")
while (line = infile.gets)
line = conv.iconv(line.strip) # FAILS HERE
puts line
# DO MORE STUFF HERE
end
奇妙なことに、ファイルの最初の行を問題なく読み取って変換します。Iconv コンストラクターに //IGNORE フラグがあります。これは、この種のエラーを抑制するためのものだと思いました。
しばらくサークルに入っています。アドバイスをいただければ幸いです。
ありがとう!
編集: Hobbs ソリューションはこれを修正します。ありがとうございました。コードを次のように変更するだけです。
require 'iconv'
conv = Iconv.new("UTF-8//IGNORE","UTF-16")
infile = File.open(tabfile, "r")
while (line = infile.gets("\x0a\x00"))
line = conv.iconv(line.strip) # NO LONGER FAILS HERE
# DOES MORE STUFF HERE
end
ここで必要なのは、どの get セパレーターを使用するかを自動的に決定する方法を見つけることだけです。