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

  • Digital Bounds

    Digital Boun

    19 Temmuz 2013
  • sWooZie

    sWooZie

    9 ŞUBAT 2006
  • VideoGamePervert

    VideoGamePer

    30 AĞUSTOS 2008