Frage

Mit Ruby habe ich zur Ausgabe von Zeichenfolgen in einem Spaltenformat an das Terminal. So etwas wie folgt aus:

| row 1     | a string here     | etc
| row 2     | another string    | etc

Ich kann diese feine tun mit Zeichen Latin UTF8 mit String # ljust und% s.

Aber ein Problem entsteht, wenn die Zeichen koreanische sind, Chinesisch, usw. Die Spalten werden einfach nicht ausrichten, wenn es Zeilen der englischen Sprache durchsetzt mit Zeilen mit Koreanisch, usw.

Wie kann ich Spaltenausrichtung hier? Gibt es eine Möglichkeit zur Ausgabe von asiatischen Zeichen im Äquivalent einer Schrift mit fester Breite? Wie wäre es für Dokumente, die in Vim angezeigt und bearbeitet werden soll werden?

War es hilfreich?

Lösung

spät zur Party, aber hoffentlich hilfreich noch: In Ruby können Sie die Unicode-display_width gem ostasiatischer-Breite zu prüfen, ob ein String ist:

require 'unicode/display_width'
"⚀".display_width #=> 1
'一'.display_width #=> 2

Andere Tipps

Ihr Problem geschieht mit CJK (Chinesisch / Japanisch / Koreanisch) voller Breite und breite Zeichen (nach unten scrollen für Diagramme auch); diese Zeichen belegen zwei mit fester Breite Zellen. String#ljust und Freunde nehmen dies nicht berücksichtigt.

Es gibt unicodedata.east_asian_width in Python, welche würden Sie erlauben zu schreiben Ihr eigener Breite-aware ljust, aber es scheint nicht in Ruby zu existieren. Das Beste, was ich in der Lage habe, ist dieser Blog-Eintrag zu finden: http: //d.hatena .ne.jp / hush_puppy / 20090227/1235740342 ( maschinelle Übersetzung ). Wenn Sie am Ausgang an der Unterseite des ursprünglichen aussehen, so scheint es zu tun, was Sie wollen, so können Sie vielleicht einige der Ruby-Code wiederverwenden.

Oder wenn Sie nur Zeichen mit voller Breite Druck (dh Sie sind nicht halbe Breite und in voller Breite Mischen), können Sie faul sein und nur mit voller Breite Formen alles verwenden, einschließlich dem Abstand und die Box Zeichnung. Hier ein paar Zeichen, die Sie kopieren und einfügen können:

  • | (volle Breite vertikale Leiste)
  • (voller Breite Raum)
  • - (voller Breite Strich; Bekommt schön in meinem Terminal Schriftart nicht gerendert)
  • ? (ein weiterer voller Breite Bindestrich)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top