ひよこの外部記憶

めもおきば

【Ruby】UTF-16でエンコードされたファイルを扱う方法

#UTF-16エンコードされたファイルをUTF-8に変更する方法について
Ruby 2.0.0-p247で動作(どのバージョンから動くのかは調べていない)
調べるとiconvを使う方法やnkfを使う方法等情報が混在していたため、備忘録がてらまとめておく


以下の例では、ディレクトリ以下にある全てのUTF-16エンコードされたファイルをUTF-8に変更する。

def trans_utf8(path)
   Dir::glob(path).select{|item| File.file?(item)}.each do |file|
     File.open(file, 'r'){ |f| 
       buffer = f.read();
       buffer = buffer.encode("UTF-8", "UTF-16", :invalid => :replace, :undef => :replace, :replace => '*')
       f = File.open(file, 'w')
       f.write(buffer)
     }   
   end 
end

fileもう一回開きなおしたらclose要るのかな?確認する。