2017-05-10 4 views
1

ich einen Code aus String binär zu transformieren:Undo Zeichenfolge in Ruby Binär

> s = "Anatomía Según Grey" 
=> "Anatomía Según Grey" 

> s.unpack("a*").first 
=> "Anatom\xC3\x83\xC2\xADa Seg\xC3\x83\xC2\xBAn Grey" 

Wie kann ich die Original-Zeichenkette erhalten (rückgängig machen die unpack)?

+0

Es gibt eine Methode Pack, aber ich bin nicht sicher, welches Argument Sie es füttern müssen die auspacken .. – Mark

Antwort

4

Die Umwandlung entspricht:

s = "Anatomía Según Grey" 
#=> "Anatomía Según Grey" 

s.force_encoding('BINARY') 
#=> "Anatom\xC3\x83\xC2\xADa Seg\xC3\x83\xC2\xBAn Grey" 

Es kann "umgekehrt" werden über: (man könnte das 'UTF-8' Teil anpassen müssen)

s.force_encoding('UTF-8') 
#=> "Anatomía Según Grey" 

force_encoding nicht die Zeichenfolge ändert, es definiert nur, wie die Bytes interpretiert werden.

die Zeichenfolge zu beheben, haben Sie wahrscheinlich encode zusätzlich zu nennen:

"Anatomía Según Grey".encode('ISO-8859-1').force_encoding('UTF-8') 
#=> "Anatomía Según Grey" 
+0

Wie umkehren Ich habe gerade überprüft, gibt es auch 'encode' Methode, die tatsächlich die Zeichenfolge ändern wird. –

+0

@FranMartinez versuchen Sie eine kaputte Saite zu reparieren? Ich habe ein Beispiel hinzugefügt. – Stefan