Betrachten Sie den folgenden Ruby-Code ein Drei-Byte-UTF-8-String Analyse:Zählen Unicode-String Länge ohne Kombinationszeichen
#encoding: utf-8
s = "\x65\xCC\x81"
p [s.bytesize, s.length, s, s.encoding.name]
#=> [3, 2, "é", "UTF-8"]
Wie beschrieben on this page of mine die oben wirklich ist ein zweistelliges String: Latin Klein e
gefolgt von Combining Acute Accent. Jedoch sieht es wie ein Zeichen aus, und das ist wichtig beim Auslegen von Displays mit fester Breite.
Betrachten Sie zum Beispiel die zwei Einträge für "moiré.svg" unter this directory listing und beachten Sie, wie einer von ihnen die Spaltenausrichtung durcheinander gebracht hat.
Wie kann ich die 'sichtbare Monospace-Länge' eines Strings in Ruby berechnen, der keine Null-Breite-Kombinationszeichen enthält? (Eine gültige Technik könnte ein Weg sein, einen Unicode-Zeichenfolge in seine kanonischen Darstellung zu transformieren, die oben in "\xC3\xA9"
drehen, die wie é
sehen auch, aber ein length
von 1
.)
Welche Version von Ruby hast du? Ich habe dein Beispiel ausprobiert und habe '[3, 3," é "]'. –
@IliaFrenkel Das obige bezieht sich auf Ruby 1.9 mit einer Kodierung von UTF-8 für Strings. Ich habe den Code bearbeitet, um den magischen Kommentar anzuzeigen, der für ein Standalone-Skript auf jedem System erforderlich wäre, auf dem UTF-8 nicht der Standard ist. – Phrogz