String to_utf8

Witam

Jak najsensowniej konwertowac do utf8 bez wzgledu na rodzaj kodowania wejsciowego ?

Dostaje pliki z automatu i chce miec pewnosc ze beda kodowane w utf8.

Czy powinienem po prostu pobrac kodowanie pliku (jak ? ) i zastosowac iconv ?

Ruby 1.8

Pozdrowienia

Najsensowniej - wiedzieć z jakim kodowaniem są zapisane wejściowe dane.

Do zgadywania kodowania dowolnych danych możesz spróbować np. github.com/jmhodges/rchardet

Dziekuje, udalo sie.

def update_xml require 'rubygems' require 'rchardet' @shop = Shop.find(params[:id]) url = "http://#{@shop.domain}#{@shop.xml_url}" tmp_file = "#{RAILS_ROOT}/tmp/#{@shop.id.to_s}_ceneo.xml" File.open(tmp_file,'w') do |f| data = "" data_sample = "" open(url) {|u| u.each_line {|line| data << line if data.size < 5000 data_sample << line end } } cd = CharDet.detect(data_sample) enc = cd['encoding'] translate = Iconv.new("UTF-8//IGNORE", enc) data_translated = translate.iconv(data) f.write(data_translated) end File.open(tmp_file, 'r') do |f| @shop.ceneo_xml = f @shop.save! end end
Jedyny problem na jaki napotkalem to bardzo dlugie dzialanie metody CharDet.detect
, zapewne przez to ze testowalem zbyt duzy plik xml (~40MB), dlatego tez ta “sztuczka” z data_sample
Uznalem, ze skoro poczatek pliku ma kodowanie “X” to reszta pliku bedzie miala takowe rowniez.

Jakies propozycje na refaktoryzacje kodu podanego powyzej ? :slight_smile:

Pozdrawiam