2012-03-07 18 views
19

Tengo el siguiente código, que me da un error de secuencia de bytes no válida que apunta al método de escaneo en initialize. ¿Alguna idea sobre cómo solucionar este problema? Por lo que vale, el error no ocurre cuando el (.*) entre la etiqueta h1 y el cierre > no está allí.Ruby Secuencia de bytes no válida en UTF-8

#!/usr/bin/env ruby 

class NewsParser 

    def initialize 
     Dir.glob("./**/index.htm") do |file| 
     @file = IO.read file 
     parsed = @file.scan(/<h1(.*)>(.*?)<\/h1>(.*)<!-- InstanceEndEditable -->/im) 
     self.write(parsed) 
     end 
    end 

    def write output 
    @contents = output 
    open('output.txt', 'a') do |f| 
     f << @contents[0][0]+"\n\n"[email protected][0][1]+"\n\n\n\n" 
    end 
    end 

end 

p = NewsParser.new 

Editar: Aquí está el mensaje de error:

news_parser.rb:10:in 'scan': invalid byte sequence in UTF-8 (ArgumentError)

resuelto: La combinación del uso: @file = IO.read(file).force_encoding("ISO-8859-1").encode("utf-8", replace: nil) y encoding: UTF-8 resolver el problema.

Gracias!

+1

try '@file = IO.read (archivo) .encode (" utf-8 ", reemplazar: nil)' – fl00r

+0

No, recibo el mismo mensaje de error. – redgem

+0

¿cuál es la codificación del archivo? – fl00r

Respuesta

34

La combinación de usar: @file = IO.read(file).force_encoding("ISO-8859-1").encode("utf-8", replace: nil) y #encoding: UTF-8 resolvió el problema.

+0

'cadena contiene nulo byte' doest trabajo ... – Matrix

Cuestiones relacionadas