2010-10-29 4 views
6

Ich habe einige Textdateien mit folgendem Inhalt zu lesen:Konvertieren eines entkam Unicode-String in seine Zeichen in Ruby 1.8

\ u201CThe Hausierer Lady von Cushing Kreuz \ u201C

In Ruby 1.9 Terminal, wenn ich erstellen Sie eine Zeichenfolge mit folgendem Inhalt:

ruby-1.9.1-p378 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "✔ ✔ my great string ✔ ✔" 

In ruby ​​1.8 erhalte ich nicht den Unicode-Codes, um ihre Zeichen umgewandelt:

ree-1.8.7-2010.01 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "u2714 u2714 my great string u2714 u2714" 

Gibt es eine einfache Möglichkeit, die richtigen String-Zeichen in Ruby 1.8 zurückzugeben?

Antwort

5

Der einfachste Ansatz könnte sein, einen JSON-Parser zu verwenden, wie JSON dieses sehr Format verwenden passiert:

irb(main):014:0> JSON '["\u2714 \u2714 my great string \u2714 \u2714"]' 
=> ["\342\234\224 \342\234\224 my great string \342\234\224 \342\234\224"] 
6

Für alle anderen, die auf diese Frage stolpert (wie ich) auf der Suche nach einer Antwort, die äquivalente Weg dies 1,8 in Ruby zu tun wäre:

["2714".to_i(16)].pack("U*") 
1

diese baut auf @ Dave Antwort. Ich verwende den folgend alle Unicode-Escape-Sequenzen in einer bestimmten Zeichenfolge mit dem entsprechenden Zeichen zu ersetzen:

string_value.gsub(/\\u([0-9a-fA-F]{4})/) {|m| [$1.hex].pack("U")} 

Es ist ein regulärer Ausdruck, der für „\ u“ Symbole, gefolgt von 4 Hexadezimal aussieht. Es wirft dann das "\ u" weg, wandelt die vier hexadezimalen Symbole in eine Ganzzahl um und verwendet pack, um das Unicode-Zeichen zu erhalten. Es ersetzt jede Escape-Sequenz durch das entsprechende Zeichen und gibt die resultierende Zeichenfolge zurück.

Es wird Ihnen Probleme geben, wenn Ihre Zeichenfolge weiter maskiert wird (z. B. indem Sie "\" als "\\" auskommentieren). Aber im Vanilla-Fall sollte es gut funktionieren.

Verwandte Themen