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

  • cosmicrocketman

    cosmicrocket

    17 NİSAN 2006
  • SamsTech

    SamsTech

    4 NİSAN 2014
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011