Pregunta

El uso de Ruby, tengo que cadenas de salida en un formato de columnas a la terminal. Algo como esto:

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

Me puede hacer esto bien con caracteres latinos UTF8 utilizando cuerdas # ljust y% s.

Sin embargo, surge un problema cuando los personajes son coreano, chino, etc. Las columnas simplemente no se alinean cuando hay filas de Inglés intercaladas con las filas que contiene coreano, etc.

¿Cómo puedo obtener la alineación de la columna aquí? ¿Hay una manera de caracteres asiáticos de salida en el equivalente de una fuente de ancho fijo? ¿Qué hay de los documentos que están destinados a mostrar y editar en Vim?

¿Fue útil?

Solución

tarde a la fiesta, pero es de esperar todavía útiles: En Ruby, se puede utilizar el joya Unicode-display_width para comprobar si este-asiático-ancho de una cadena:

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

Otros consejos

Su problema ocurre con CJK (chino / japonés / coreano) de ancho completo y caracteres anchos (también desplazarse hacia abajo para ver los diagramas); esos caracteres ocupan dos células de ancho fijo. String#ljust y amigos no lo tienen en cuenta.

Hay unicodedata.east_asian_width en Python, lo que le permitirá escribir su propio ancho de ljust-consciente, pero no parece existir en Ruby. El mejor que he podido encontrar es esta entrada del blog: http: //d.hatena .ne.jp / hush_puppy / 20090227/1235740342 ( máquina de traducción ). Si nos fijamos en la salida en la parte inferior de la original, que parece hacer lo que quiere, así que tal vez se puede reutilizar una parte del código Ruby.

O si sólo se está imprimiendo caracteres de ancho completo (es decir, no se va a mezclar la mitad del ancho y de ancho completo), puede ser perezoso y sólo tiene que utilizar formas de ancho completo de todo, incluyendo el espaciamiento y la caja dibujo. Aquí hay un par de caracteres que se pueden copiar y pegar:

  • | (barra vertical de ancho completo)
  • (espacio de ancho completo)
  • - (guión de ancho completo; no recibe rindió muy bien en mi fuente de terminal)
  • ? (otro tablero de ancho completo)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top