0

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

ArgumentError: invalid byte sequence in UTF-8

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

当我查看文件时,似乎没有什么与有效的文件不同。

建议?

编辑:用户名中似乎有一个“xE9”字符。

4

2 回答 2

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
于 2012-12-06T16:39:33.243 回答
-1

一个说明解决方案的小工作:

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
于 2015-08-17T18:18:00.863 回答