我正在尝试填充电影对象,但在解析u.item
文件时出现此错误:
`split':UTF-8中无效的字节序列(ArgumentError)
File.open("Data/u.item", "r") do |infile|
while line = infile.gets
line = line.split("|")
end
end
只有在尝试使用精美的国际标点符号拆分行时才会出现错误。
这是一个示例
543 |Misérables,Les(1995)| 01-Jan-1995 || http://us.imdb.com/M/title-exact?Mis%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
有解决方法吗?
答案 0 :(得分:20)
我必须强制每行的编码为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}
答案 1 :(得分:12)
Ruby对字符编码问题有点敏感。你可以做很多事情来解决你的问题。例如:
在源文件的顶部放置编码注释。
# encoding: utf-8
在拆分之前对您的行进行明确编码。
line = line.encode('UTF-8').split("|")
替换无效字符,而不是引发Encoding :: InvalidByteSequenceError异常。
line.encode('UTF-8', :invalid => :replace).split("|")
提供这些建议,如果这些建议都不适合您,请更新您的问题。希望它有所帮助!