A caixa com um ponto de interrogação soa como o caractere de substituição Unicode. Isso pode ser exibido nessa situação:
- o terminal usa a codificação UTF-8,
- alguém digitou um caractere multibyte usando a codificação UTF-8,
- a tecla de retrocesso (ou qualquer que seja a palavra) é recebida, mas
- apenas parte do caractere, ou seja, o último byte é removido pelo driver de terminal e
- o terminal, solicitado a (re) exibição tem apenas um caractere incompleto, e
- mostra o caractere de substituição:
EmboraokerneldoLinuxtenhasuportadoumsinaliutf8
porváriosanos,issonãoépadronizadoegeralmentenãoestádisponívelemoutrossistemas(
Leitura adicional:
The tty driver of any POSIX system supports a “cooked” mode, in which some primitive line editing functionality is available. In order to allow the character-erase function (which is activated when you press backspace) to work properly with UTF-8, someone needs to tell it not count continuation bytes in the range 0x80-0xBF as characters, but to delete them as part of a UTF-8 multi-byte sequence. Since the kernel is ignorant of the libc locale mechanics, another mechanism is needed to tell the tty driver about UTF-8 being used. Linux kernel versions 2.6 or newer support a bit IUTF8 in the
c_iflag
member variable of struct termios. If it is set, the “cooked” mode line editor will treat UTF-8 multi-byte sequences correctly. This mode can be set from the command shell with “stty iutf8”. Xterm and friends should set this bit automatically when called in a UTF-8 locale.