Ruby 1.8 und UTF-8-String case-Anweisung vergleichen
-
20-08-2019 - |
Frage
ich eine Rake Aufgabe haben (in lib / Aufgaben-Verzeichnis), die ich mit cron auf meinem Shared Web Hosting. Das Problem ist, dass ich einen UTF-8-String mit Fall statment vergleichen will, aber mein Quellcode ist nicht UTF-8 codiert. Wenn ich Quellcode speichern als UTF-8 gibt Fehler, wenn ich versuche, es zu starten: (
Was muss ich tun?
Auch diese Strings aus anderer UTF-8 txt-Datei gelesen werden?
P. S. Ich bin mit Ruby 1.8
P. S. Ich meine, vergleichen diese Weise:
result = case utf8string
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end
Lösung
Ich würde sagen, Sie Ihren Text-Editor ändern müssen als BOM ist nicht benötigt für UTF-8. UTF-8 ist nicht Byte-Reihenfolge abhängig. Siehe Link-Text .
Andere Tipps
Ich fand, dass mein Problem nicht bei statment war
Das Problem war, dass, wenn ich meinen Quellcode in UTF-8-Format speichern, mein Texteditor am Anfang 3 Bytes (BOM) hinzufügen, dass Codierung, um anzuzeigen, ist UTF-8.
F: Was ist ein BOM
A: Ein Bytereihenfolgemarkierung (BOM) aus dem Zeichencode U + FEFF am Anfang eines Datenstroms, in dem es als eine verwendet werden kann, Signatur definieren die Bytereihenfolge und Form codiert, in erster Linie von unmarkierten Klartext-Dateien. Unter einigen höheren Protokollen kann die Verwendung einer BOM sein obligatorisch (oder verboten) im Strom Unicode-Daten in diesem Protokoll festgelegt.
Der Fehler, der ich war:
1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
Versuchen Sie, die mb_chars
Methode von Rails' Active Framework:
result = case utf8string.mb_chars
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end