Efecto de $ LANG en la terminal

Pregunta:

Estoy tratando de aprender cómo se comporta la variable $LANG con gnome-terminal (y su opción de preferencia de codificación de caracteres). He estado usando iso8859-1 (latin1) como mi conjunto de caracteres principal y todos mis nombres de archivo están codificados como tales.

Para las siguientes pruebas, haré un ls -l de un directorio con caracteres acentuados en español en sus nombres de archivo:

Caso 1:

  • gnome-terminal configurado para ISO-8859-1
  • LANG establecido en "en_US-iso8859-1"
  • Resultado: veo todos los archivos correctamente

Caso # 2:

  • gnome-terminal configurado para UTF-8
  • LANG establecido en "en_US-iso8859-1"
  • Resultado: veo caracteres basura para todos los caracteres españoles. Esto se esperaba ya que cambié la codificación de caracteres para el terminal

Caso # 3:

  • gnome-terminal configurado para ISO-8859-1
  • LANG establecido en "en_US-UTF-8"
  • Resultado: veo caracteres basura para todos los caracteres españoles.

¿Por qué en este último caso veo caracteres confusos? ¿No debería la salida de ls enviar los nombres de archivo directamente a gnome-terminal tal como están? Y dado que gnome-terminal está configurado para ISO-8859-1, habría esperado que se vieran bien.

Por un momento pensé que, tal vez, tal vez bash esté considerando mi variable $LANG y realizando alguna conversión. Luego cambié mi terminal a UTF-8 pero todavía no puedo ver bien los caracteres. Incluso canalicé la salida de ls a xxd y, para mi sorpresa, todavía veo los archivos codificados como están: ISO-8859-1.

Para terminar: Si mi listado contiene caracteres ISO-8859-1 y mi emulador de terminal está configurado para la misma codificación de caracteres: ¿Quién está haciendo la conversión cuando LANG está configurado de otra manera?

Gracias por cualquier ayuda que usted nos pueda proporcionar.

Craconia

Respuesta:

Su configuración de LANG debe coincidir con la del terminal. Más precisamente, su configuración para LC_CTYPE (la codificación de caracteres) debe coincidir con la codificación del terminal, las otras configuraciones regionales no necesitan coincidir. Y la codificación de la terminal generalmente se especifica mediante una opción del emulador de terminal y no mediante una variable de configuración regional. LC_CTYPE combina dos indicaciones: le dice a las aplicaciones qué codificación usar en el terminal (tanto para la entrada como para la salida), y le dice a las aplicaciones qué codificación usar con los archivos. En los casos 2 y 3, le ha dicho a ls que muestre la salida en una codificación diferente a la del terminal, por lo que la salida está distorsionada.

Si trabaja con codificaciones UTF-8 y latin-1 en diferentes momentos, configure su terminal para usar UTF-8. Esto debería hacer que establezca LC_CTYPE en un valor que indique UTF-8; no anule esta configuración. (Si el emulador de terminal no configura LC_CTYPE , LC_CTYPE en su archivo de inicio de shell o para toda su sesión). Para trabajar con datos latin-1 en un terminal UTF-8, use luit (incluido en el paquete de utilidades X) .

LC_CTYPE=en_US.iso88591 luit

(Puede usar cualquier otra configuración regional con la misma codificación, por ejemplo, LC_CTYPE=es_ES.iso88591 luit ).

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım