2010-08-25 7 views
3

j'essaie de sortir le setence allemand contenant la lettre "ü" sous forme échappé (ascii 252, octal 374, hex 0xFC) en utilisant le code suivant:encodage de caractères dans la chaîne

pp "Test \374" 
pp "Test \374".encode("UTF-8") 

Mais en utilisant Ruby 1.8. 7 Je reçois: "test \ 374" "test \ 374"

En utilisant les sorties Ruby 1.9.2: "test \ XFC" "test \ XFC"

Comment puis-je obtenir Ruby (1.8 .7 + 1.9.x) pour sortir "Test ü "? :)

Répondre

6
>> pp "Test \xc3\xbc" 
"Test ü" 
=> nil 

>> s="Test \374" # This has utf-8 encoding but we need it to be "ISO-8859-1" 
=> "Test \xFC" 
>> s.force_encoding("ISO-8859-1") 
=> "Test " 
>> s.encode("UTF-8") 
=> "Test ü" 
>> 
+0

Pourquoi ma séquence d'échappement ne fonctionne-t-elle pas? Comme je reçois la chaîne d'une source de données externe, comment puis-je la convertir dans votre formulaire afin que ruby ​​puisse y faire face? – gucki

+0

@gucki, votre source de données est probablement codée ISO-8859-1. J'ai ajouté un exemple pour vous montrer comment le changer. Mieux serait d'ouvrir la source de données comme ISO-8859-1 si possible –

+0

malheureusement la source de données renvoie parfois correcte utf-8, parfois iso-8859-1. mais votre solution fonctionne très bien, merci :) – gucki