SORU
6 HAZİRAN 2010, Pazar


ruby 1.9: UTF-8 geçersiz bayt sırası

Rastgele birçok site HTML tüketir Ruby bir paletli (1.9) yazıyorum.
Bağlantıları ayıklamak için çalışırken, sadece .scan(/href="(.*?)"/i) yerine nokogiri/hpricot (büyük hızlanma) kullanmaya karar verdim. Sorun ben şimdi "invalid byte sequence in UTF-8" hataları. çok almanızdır
Anladığım kadarıyla net/http kütüphane kodlama özel seçenekler ve temelde doğru etiketlenmemiş gelen herhangi bir şeyleri yok.
Aslında gelen veri ile çalışmak için en iyi yolu ne olurdu? Yerini ve geçersiz bir seçenek kümesi ile .encode ama hiçbir başarı şimdiye kadar çalıştım...

CEVAP
15 Ocak 2012, Pazar


Ruby 1.9.3 Dize kullanmak mümkündür.kodlamak "" geçersiz UTF-8 dizileri. görmezden Burada 1.8 (iconv) ve 1.9 (String#encode) hem de çalışacak bir parçacık:

require 'iconv' unless String.method_defined?(:encode)
if String.method_defined?(:encode)
  file_contents.encode!('UTF-8', 'UTF-8', :invalid => :replace)
else
  ic = Iconv.new('UTF-8', 'UTF-8//IGNORE')
  file_contents = ic.iconv(file_contents)
end

ya Eğer gerçekten zahmetli bir giriş varsa UTF-16 UTF-8 çift dönüşüm yapın ve UTF-8 için kullanılabilir:

require 'iconv' unless String.method_defined?(:encode)
if String.method_defined?(:encode)
  file_contents.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
  file_contents.encode!('UTF-8', 'UTF-16')
else
  ic = Iconv.new('UTF-8', 'UTF-8//IGNORE')
  file_contents = ic.iconv(file_contents)
end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ayite Atiwoto (superjiffrey)

    Ayite Atiwot

    29 EYLÜL 2010
  • Google

    Google

    18 EYLÜL 2005
  • NextKsa

    NextKsa

    7 EKİM 2009