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

  • ADDVOiCE

    ADDVOiCE

    28 Mayıs 2009
  • Defence Videos

    Defence Vide

    13 Mayıs 2013
  • RickardRick

    RickardRick

    9 Mart 2007