我有一个应用程序,可以读取客户提供的大量数据文件。它与几个完美配合,但是,在我今天收到的一个文件中,它失败了:
ArgumentError: invalid byte sequence in UTF-8
我正在使用String.match来查找正则表达式模式。
当我查看该文件时,似乎与那些有效的文件不同。
么?
编辑:看起来用户名中有一个'xE9'字符。
答案 0 :(得分:3)
感谢@muistooshort的帮助,我以ISO模式打开文件,然后逐行阅读,转换为UTF-8。
myfile = File.open( 'thefile.txt', 'r:iso8859-1' )
while rawline = myfile.gets
line = rawline.force_encoding( 'utf-8' )
# proceed...
end
答案 1 :(得分:0)
一个简单的佣金工作,说明了解决方案:
task :reencode, [:filename] => [:environment] do |t, args|
myfile = File.open( args[:filename], 'r:iso8859-1' )
outfile = File.open( args[:filename] + ".out", "w+" )
while rawline = myfile.gets
line = rawline.force_encoding( 'utf-8' )
outfile.write line
end
outfile.close
end