2017-10-24 1 views
0

Ich mag diese Zeichenfolge konvertierenEncoding in Ruby utf-8-Fehler

"Nous travaillons \u00c3\u00a1 rendre" 

zu

Nous travaillons à rendre

aber nicht in der Lage, es zu tun. Ich versuchte force_encoding("UTF-8") Methode auf Zeichenfolge, aber das hat nicht funktioniert. Meine Ausgabe ist immer

"Nous travaillons á rendre" 

Das einzige, was zu funktionieren scheint, ist, wenn ich manuell \u00 ersetzen mit \x

"Nous travaillons \xc3\xa1 rendre" 

aber gsub nicht arbeitet an diesem "Nous travaillons \u00c3\u00a1 rendre"

zu sein scheint

Ich verwende Rubin 1.9.3

+1

Obligatorisch zurückgreifen müssen: Gibt es einen guten Grund, warum Sie Rubin verwenden '1.9.3'? Diese Version ist ** alt ** und wird nicht mehr unterstützt. –

+0

Ich bin ein Update zu einer Sinatra-App und es ist auf 1.9.3 –

+0

Sie könnten in der Lage sein, die Byte-Sequenz 0xC3 0xA1 in 'á' zu konvertieren, aber die Umwandlung' á' nach 'à' ist eine Rechtschreibprüfung Problem, nicht ein Codierungsproblem. – Stefan

Antwort

0

Sie müssen danach die Zeichenfolge codieren und erzwingen.

"Nous travaillons á rendre".encode("Windows-1252").force_encoding("utf-8") 

Ergebnis:

"Nous travaillons á rendre" 
+0

Dank, aber hier ist der Fehler 'Encoding :: UndefinedConversionError: U + 2019 von UTF-8 in ISO-8859-1 \t aus (rb): 162: in' kodieren‘ \t aus (IRB): 162' –

+1

Hinweis : (1) Die Codierung kann tatsächlich "Windows-1252" sein, nicht "iso-8859-1"? Und (2) es [sieht zu mir] (http://www.i18nqa.com/debug/utf8-debug.html) wie das richtige Zeichen ** ist ** eigentlich á, nicht à (??) –

+0

@SumeetMasih ist dieser Fehler von einer * längeren * Eingabezeichenfolge? Wenn ja, können Sie eine einfache Reproduktion finden? wenn nicht, funktioniert mein alternativer Kodierungsvorschlag? Ein Hinweis auf die korrekte Kodierung kann von der * ursprünglichen Datenquelle * kommen - was ist das? MS Word? –

1

Haben Sie versucht: "Nous Travaillons \ u00E0 rendre"?

Das Zeichen, das Sie wollen (lateinischer Kleinbuchstabe A mit Grab) ist ein einzelnes Unicode-Zeichen. Das bedeutet, wenn Sie \ u verwenden, möchten Sie nur eine Escape-Sequenz, nicht zwei, wie Ihre Frage ist. Sie vermischen das Konzept von Unicode-Codepunkt (Zeichen) und UTF-8-Codierung.

Wenn Sie UTF-8-Codierung in der Zeichenfolge darstellen möchten, sollten Sie zwei \ x Sequenzen verwenden ... wenn Sie das codierte Zeichen selbst darstellen möchten, können Sie eine \ u-Sequenz verwendet werden soll.

Es ist nur Ihre falsche Verwendung von \ u, dass macht Sie force_encoding