Question

En utilisant Ruby, je dois les chaînes de sortie dans un format colonnaire au terminal. Quelque chose comme ceci:

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

Je peux le faire très bien avec caractères latins UTF8 en utilisant chaîne # ljust et% s.

Mais un problème se pose lorsque les personnages sont coréen, chinois, etc. Les colonnes simplement ne seront pas alignés quand il y a des lignes d'anglais entrecoupées de lignes contenant coréen, etc.

Comment puis-je obtenir l'alignement de la colonne ici? Est-il un moyen de sortie des caractères asiatiques dans l'équivalent d'une police à largeur fixe? Que diriez-vous des documents qui sont destinés à afficher et édité dans vim?

Était-ce utile?

La solution

fin de la partie, mais nous espérons toujours utile: Dans Ruby, vous pouvez utiliser le joyau unicode-display_width pour vérifier la largeur est-asiatique d'une chaîne:

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

Autres conseils

Votre problème se produit avec CJK (chinois / japonais / coréen) pleine largeur et caractères larges (défilement vers le bas pour les diagrammes aussi); ces caractères occupent deux cellules de largeur fixe. String#ljust et les amis ne prennent pas en compte.

Il est unicodedata.east_asian_width en Python, qui vous permettra d'écrire votre propre ljust de largeur au courant, mais il ne semble pas exister dans Ruby. Le meilleur que je suis en mesure de trouver est ce blog: http: //d.hatena .ne.jp / hush_puppy / 20090227/1235740342 ( traduction automatique ). Si vous regardez la sortie au fond de l'original, il semble faire ce que vous voulez, vous pouvez donc peut-être réutiliser une partie du code Ruby.

Ou si vous imprimez uniquement des caractères pleine largeur (vous n'êtes pas mélanger demi-largeur et largeur), vous pouvez être paresseux et il suffit d'utiliser les formes pleine largeur de tout, y compris l'espacement et la boîte dessin. Voici un des personnages de couple, vous pouvez copier et coller:

  • | (barre verticale pleine largeur)
  • (espace de grande largeur)
  • - (tiret pleine largeur, ne soit pas rendu bien dans ma police terminal)
  • ? (un autre tableau de bord sur toute la largeur)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top