我如何找到/修复:ArgumentError:UTF-8中的无效字节序列?

时间:2012-12-04 19:52:24

标签: ruby-on-rails ruby string

我有一个应用程序,可以读取客户提供的大量数据文件。它与几个完美配合,但是,在我今天收到的一个文件中,它失败了:

ArgumentError: invalid byte sequence in UTF-8

我正在使用String.match来查找正则表达式模式。

当我查看该文件时,似乎与那些有效的文件不同。

么?

编辑:看起来用户名中有一个'xE9'字符。

2 个答案:

答案 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