Domanda

Utilizzando rubino, devo stringhe di output in un formato a colonne al terminale. Qualcosa di simile a questo:

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

posso farlo benissimo con caratteri latini UTF8 utilizzando String # ljust e% s.

Ma un problema si pone quando i personaggi sono coreano, cinese, ecc Le colonne semplicemente non si allineano quando ci sono file di inglese intervallati da filari contenente coreano, ecc

Come posso ottenere l'allineamento della colonna qui? C'è un modo per caratteri asiatici in uscita l'equivalente di un carattere a larghezza fissa? Che ne dite per i documenti che sono destinate ad essere visualizzati e modificati in Vim?

È stato utile?

Soluzione

in ritardo alla festa, ma si spera ancora utile: In Ruby, è possibile utilizzare il gemma unicode-display_width per verificare la presenza di est-asiatico-larghezza di una stringa:

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

Altri suggerimenti

Il problema si verifica con CJK (cinese / giapponese / coreano) a tutta larghezza e caratteri estesi (scorrere verso il basso anche per i diagrammi); tali caratteri occupano due celle a larghezza fissa. String#ljust e gli amici non tengono conto di questo.

unicodedata.east_asian_width in Python, che permetterebbe di scrivere il proprio ljust larghezza-aware, ma non sembra esistere in Ruby. Il meglio che ho potuto trovare è questo post del blog: http: //d.hatena .ne.jp / hush_puppy / 20090227/1235740342 ( traduzione automatica ). Se guardate l'uscita in fondo di quella originale, sembra di fare ciò che si vuole, quindi forse è possibile riutilizzare parte del codice Ruby.

Oppure, se siete solo la stampa di caratteri interi (cioè che non stai mescolando metà larghezza e di grande ampiezza), si può essere pigri e basta usare tutta larghezza forme di tutto, compreso la spaziatura e la scatola disegno. Ecco un paio caratteri che è possibile copiare e incollare:

  • | (full-width barra verticale)
  • (spazio a tutta larghezza)
  • - (trattino full-width, non ottiene reso bene nel mio carattere terminale)
  • ? (un altro trattino full-width)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top