UTF-16のBOM(リトルエンディアン)を挿入するワンライナー
ruby -i -e 'print ARGF.read.sub(/\A/, "\u{FFFE#}")' file.csv
UTF-16LEのBOM(リトルエンディアン)を挿入するFileクラス拡張
UTF-8のファイルからUTF-16LEへの変換前提
class File
def self.insert_bom(input_filename, output_filename)
src = File.read(input_filename)
File.open(output_filename, "w:UTF-16") do |f|
src = ' ' + src
src.setbyte(0, 0xFF)
src.setbyte(1, 0xFE)
f.print src
end
end
end
UTF-8のファイルをUTF-16LEに変換する
File.write "file_utf16.csv", NKF.nkf('-w16L',File.read("file_utf8.csv"))
File.insert_bom("file_utf16.csv", "file_utf16_bom.csv")
実行結果
$ nkf --guess file_utf8.csv
UTF-8 (CRLF)
$ nkf --guess file_utf16.csv
BINARY
$ nkf --guess file_utf16_bom.csv
UTF-16 LE (BOM) (CRLF)
参考
http://magazine.rubyist.net/?0009-BundledLibraries#l7
http://tbpgr.hatenablog.com/entry/20140204/1391517653