2012-03-07 17 views
19

Aşağıdaki kod var, bu da bana initialize'da tarama yöntemini işaret eden geçersiz bir bayt dizisi hatası veriyor. Bunu nasıl düzelteceğinizle ilgili bir fikrin var mı? Bu değer, h1 etiketi ve > kapanışı arasında (.*) olmadığı zaman hata oluşmaz.Ruby UTF-8'de Geçersiz Bayt Sırası

#!/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 

Düzenleme: ÇÖZÜLDÜ

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

: kullanarak kombinasyonu: @file = IO.read(file).force_encoding("ISO-8859-1").encode("utf-8", replace: nil) ve encoding: UTF-8 sorunu çözmek İşte hata mesajıdır.

Teşekkürler!

+1

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

+0

Hayır, aynı hata iletisini alıyorum. – redgem

+0

Dosya kodlaması nedir? – fl00r

cevap

34

@file = IO.read(file).force_encoding("ISO-8859-1").encode("utf-8", replace: nil) ve #encoding: UTF-8 kullanımının kombinasyonu, sorunu çözmüştür.

+0

'dize, null byte' doest çalışması içeriyor ... – Matrix

İlgili konular