我有一个读取客户提供的大型数据文件的应用程序。它与几个完美配合,但在我今天收到的一个文件中,它失败了:
ArgumentError: invalid byte sequence in UTF-8
我正在使用 String.match 来查找正则表达式模式。
当我查看文件时,似乎没有什么与有效的文件不同。
建议?
编辑:用户名中似乎有一个“xE9”字符。
我有一个读取客户提供的大型数据文件的应用程序。它与几个完美配合,但在我今天收到的一个文件中,它失败了:
ArgumentError: invalid byte sequence in UTF-8
我正在使用 String.match 来查找正则表达式模式。
当我查看文件时,似乎没有什么与有效的文件不同。
建议?
编辑:用户名中似乎有一个“xE9”字符。
感谢@muistooshort 的帮助,我以 ISO 模式打开文件,然后逐行读取,转换为 UTF-8。
myfile = File.open( 'thefile.txt', 'r:iso8859-1' )
while rawline = myfile.gets
line = rawline.force_encoding( 'utf-8' )
# proceed...
end
一个说明解决方案的小工作:
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