ruby character-encoding argument-error

encoding ruby



Ruby `split '': secuencia de bytes no vĂ¡lida en UTF-8(ArgumentError) (2)

Ruby es algo sensible a los problemas de codificación de caracteres. Puedes hacer una serie de cosas que podrían resolver tu problema. Por ejemplo:

  1. Ponga un comentario de codificación en la parte superior de su archivo fuente.

    # encoding: utf-8

  2. Codifica explícitamente tu línea antes de dividir.

    line = line.encode(''UTF-8'').split("|")

  3. Reemplace los caracteres no válidos, en lugar de generar una excepción Encoding :: InvalidByteSequenceError.

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

Pruebe estas sugerencias y actualice su pregunta si ninguna de ellas le funciona. ¡Espero eso ayude!

Estoy intentando rellenar el objeto de la película, pero al analizar el archivo u.item , u.item este error:

`split '': secuencia de bytes no válida en UTF-8 (ArgumentError)

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

El error se produce solo cuando se intenta dividir las líneas con una puntuación internacional elegante.

Aquí hay una muestra

543 | Misérables, Les (1995) | 01-Ene-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

¿Hay algún trabajo alrededor?


Tuve que forzar la codificación de cada línea a iso-8859-1 (que es el conjunto de caracteres europeo) ... 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}