ムービーオブジェクトにデータを入力しようとしていますが、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
回避策はありますか?
各行のエンコードを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}
Rubyは文字エンコードの問題にやや敏感です。あなたはあなたの問題を解決するかもしれない多くのことをすることができます。例えば:
ソースファイルの先頭にエンコーディングコメントを配置します。
# encoding: utf-8
分割する前に、行を明示的にエンコードします。
line = line.encode('UTF-8').split("|")
Encoding :: InvalidByteSequenceError例外を発生させる代わりに、無効な文字を置き換えます。
line.encode('UTF-8', :invalid => :replace).split("|")
これらの提案を試してみて、どれもうまくいかない場合は質問を更新してください。それが役に立てば幸い!