红宝石`分裂':在UTF-8(引发ArgumentError)无效的字节序列(Ruby `s

2019-07-29 23:18发布

我想填充影片对象,而是通过在解析时u.item文件,我得到这个错误:

`分裂':无效的字节序列中UTF-8(引发ArgumentError)

File.open("Data/u.item", "r") do |infile|
            while line = infile.gets
                line = line.split("|")
            end
end

试图分裂与花哨的国际标点符号的线条,只有当出现此错误。

下面是一个示例

543 |悲惨世界,莱斯(1995)| 01-JAN-1995 || HTTP://us.imdb.com/M/title-exact误%E9rables%2C%20Les%20%281995 29%| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0

有一个变通?

Answer 1:

我不得不强迫每一行ISO-8859-1的编码(这是欧洲字符集)... http://en.wikipedia.org/wiki/ISO/IEC_8859-1

a=[]
IO.foreach("u.item") {|x| a << x}
m=[]
a.each_with_index {|line,i| x=line.force_encoding("iso-8859-1").split("|"); m[i]=x}


Answer 2:

Ruby是字符编码的问题有些敏感。 你可以做一些可能解决您的问题的东西。 例如:

  1. 把编码评论你的源文件的顶部。

     # encoding: utf-8 
  2. 明确地编码分割之前,你的线。

     line = line.encode('UTF-8').split("|") 
  3. 替换无效字符,而不是抛出一个编码:: InvalidByteSequenceError例外。

     line.encode('UTF-8', :invalid => :replace).split("|") 

给这些建议了一枪,并更新你的问题,如果他们没有为你工作。 希望能帮助到你!



文章来源: Ruby `split': invalid byte sequence in UTF-8 (ArgumentError)