2010-05-28 7 views
0

Je rencontre un peu de problèmes avec les encodages de fichiers. Je reçois une chaîne encodée par URL comme "sometext% C3% B3 + more +% 26 + et plus", l'efface, traite les données et les enregistre avec l'encodage windows-1252.Codages de fichiers avec ruby ​​

Les conversions sont les suivants:

irb(main) >> value 
=> "sometext%C3%B3+more+%26+andmore" 
irb(main) >> CGI::unescape(value) 
=> "sometext\303\263 more & andmore" 
irb(main) >> #Some code and saved into a file using open(filename, "w:WINDOWS-1252") 
irb(main) >> # result in the file: 
=> sometextĂ³ more & andmore 

Et le résultat devrait être sometextó more & andmore

Répondre

4

support de l'encodage a été ajouté à Ruby 1.9, de sorte que le code suivant est de Ruby 1.9.1:

require 'cgi' 
#=> true 
s = "sometext%C3%B3+more+%26+andmore" 
#=> "sometext%C3%B3+more+%26+andmore" 
t = CGI::unescape s 
#=> "sometext\xC3\xB3 more & andmore" 
t.force_encoding 'utf-8' # telling Ruby that the string is UTF-8 encoded 
#=> "sometextó more & andmore" 
t.encode! 'windows-1252' # changing encoding to windows-1252 
#=> "sometext? more & andmore" 
# here you do whatever you want to do with windows-1252 encoded string 

Here vous avez beaucoup d'informations sur Ruby et encodages.

PS. Ruby 1.8.7 ne pas un support intégré pour les encodages, donc vous devez utiliser une bibliothèque externe pour la conversion, par exemple iconv:

require 'iconv' 
#=> true 
require 'cgi' 
#=> true 
s = "sometext%C3%B3+more+%26+andmore" 
#=> "sometext%C3%B3+more+%26+andmore" 
t = CGI::unescape s 
#=> "sometext\303\263 more & andmore" 
Iconv.conv 'windows-1252', 'utf-8', t 
#=> "sometext\363 more & andmore" 
# \363 is ó in windows-1252 encoding 
+0

Je ne dis rien, mais je besoin d'une solution en utilisant Ruby 1.8.7 (Mais merci :)) – pablorc

+0

J'ai mis à jour la réponse en conséquence. –

+0

J'ai quelques problèmes avec mon entrée, mais cela fonctionne. Merci beaucoup! – pablorc

Questions connexes