Diría que lo más probable es que su terminal esté mal configurado y envíe y muestre caracteres en algún conjunto de caracteres de un solo byte -, probablemente ISO8859 -1 o ISO8859 -15 dados los caracteres de muestra que muestra en lugar de los de la configuración regional juego de caracteres.
Por lo general, no hay ningún carácter ø
, å
, æ
en la configuración regional C y la codificación ISO8859 -1 (5 )de esos caracteres (0xf8, 0xe5, 0xe6 )no forman caracteres válidos en UTF -8. Los editores de línea como readline o zle necesitan decodificarlos en caracteres, ya que necesitan saber cuántos bytes componen una columna de visualización para poder posicionar el cursor correctamente.
Además, en la configuración regional C que en la mayoría de los sistemas usa ASCII, dado que no hay caracteres en ASCII con el bit 8 establecido, ese bit 8 se entendería por bash
como significado Meta . 0xF8 se entendería como Meta+x(0x78 (x )| 0x80 ),porque eso es lo que envían algunos terminales Alt+x o Meta+x .
Mientras que M -x no está vinculado a nada por defecto en bash
, ß
se entendería como M -_e insertaría la última palabra. Puedes apagar eso con:
bind 'set convert-meta off'
Shells como csh
son demasiado antiguos como para darse cuenta de que los caracteres pueden estar hechos de varios bytes o ocupar cualquier cosa menos el ancho de una sola columna, por lo que no molestan.
Para verificar esa teoría, ejecute:
od -An -vtx1
E ingrese esos caracteres seguidos de ^D^D
y vea qué codificación ve. Si ve 0xf8 para ø
, eso significa que tengo razón. Si ve 0xc3 0xb8 en su lugar, que es la codificación UTF -8 de ø
, eso significa que estoy equivocado.
O cambie la configuración regional ada_DK.iso88591
(compruebe en locale -a
el nombre exacto de la configuración regional en su sistema )y vea si eso funciona mejor.
Ahora, en cuanto a por qué su terminal puede enviar la codificación incorrecta para esos caracteres, tal vez se inició en una configuración regional donde el conjunto de caracteres era iso8859 -1. Tal vez está configurado para ignorar la configuración regional y usar un conjunto de caracteres específico (busque juego de caracteres o codificación en su configuración ). O tal vez haya ingresado ssh
desde otro sistema en el que la configuración regional usaba ISO8859 -1 (5 )como conjunto de caracteres.
Puedo reproducir ese comportamiento si desde una terminal UTF -8, ejecuto:
LC_ALL=en_GB.iso885915 luit
Y desde luit
cambie la configuración regional a C
o una UTF -8 e ingrese caracteres que no sean -ASCII.