RoR ASCII 8 bits pour le codage UTF-8 avec les non-latins (cyrillique) symboles Net::HTTP.get_response.corps

StackOverflow https://stackoverflow.com//questions/11701062

  •  13-12-2019
  •  | 
  •  

Question

J'ai besoin d'obtenir des données via le Net::HTTP, il fonctionne bien, par je recevoir de réponse en ASCII 8 bits.Le problème est de savoir comment coder cela en utf8 et enregistrer tous des caractères non-latin?

Avec @content.encode('utf-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '') je lâche tous les symboles de l'alphabet cyrillique

Avec @content.encode('utf-8', 'binary') je reçois "\xCB" from ASCII-8BIT to UTF-8 erreur

Avec @content.force_encoding("UTF-8) je reçois ������ au lieu de symboles de l'alphabet cyrillique

Je ne peux pas trouver la réponse grâce à la recherche google.

Était-ce utile?

La solution

Le problème est résolu avec

begin
    cleaned = response.body.dup.force_encoding('UTF-8')
    unless cleaned.valid_encoding?
       cleaned = response.body.encode( 'UTF-8', 'Windows-1251' )
    end
    content = cleaned
rescue EncodingError
    content.encode!( 'UTF-8', invalid: :replace, undef: :replace )
end

ici est le plus complet de données

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top