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
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
Ruby on Rails "UTF-8" geçersi...
TEKRAR hata: Mac OS üzerinde geçersiz ...
Alma "hata - geçersiz bir bayt sı...
Bayt Sırası İşareti (BOM) olmadan meti...
geçersiz boş char (US-ASCII) Rails ve ...