Observe que \xE2\x9C\x94
é a codificação UTF-8 do caractere U + 2714 ( marca de verificação pesada ).
Esses 3 bytes serão exibidos apenas como uma marca de verificação se o conjunto de caracteres do terminal for UTF-8 (e usar uma fonte que tenha esse caractere).
Para emuladores de terminal, o conjunto de caracteres que eles usam normalmente será aquele no local no momento em que foram iniciados. A menos que você tenha alterado a localidade dentro do shell iniciado naquele terminal, você pode dizer com qual delas estava:
locale charmap
Diversas implementações printf
incluindo GNU printf
e printf
embutido de zsh
, bash
e lksh
(pelo menos um variante compatível com POSIX de mksh
no sistema baseado em Debian) :
$ printf '\u2714\u274c\n'
✔❌
Para imprimir esses caracteres na codificação correta para o conjunto de caracteres do código de idioma (o printf
builtin de ksh93 também suporta essa notação de \uXXXX
, mas sempre gera saída em UTF-8, independentemente do conjunto de caracteres do código do idioma). Shells cujo printf
builtin o suporta e tem um echo
que expande as seqüências de escape (possivelmente com -e
) normalmente também suportam \uXXXX
.
Agora, AFAICT, os únicos dois conjuntos de caracteres onde os dois caracteres U + 274C e U + 2714 estão disponíveis em um sistema GNU típico são UTF-8 e GB18030. Em locais usando conjuntos de caracteres diferentes, printf
não poderá exibir esses caracteres, pois eles simplesmente não existem. Dependendo da implementação, printf
imprimirá \u274C
literalmente ou falhará com um erro.
Alguns shells ( zsh
de onde é originado, bash
, ksh93
, mksh
, FreeBSD sh
) também suportam essa \uXXXX
de notação em suas cotas $'...'
.
Então você pode fazer:
echo $'\u2714\u274c'
Dependendo do shell, eles serão expandidos para a codificação do locale que estava em vigor no momento em que o comando foi analisado ( bash
) ou no momento em que foi executado ( zsh
) ou em UTF-8 sempre (ksh).
POSIXly (portável entre sistemas similares ao Unix), se você quiser imprimir seqüências arbitrárias de bytes, você vai querer usar printf
e a notação octal.
\xE2\x9C\x94
(a codificação UTF-8 de U + 2714) seria impresso em uma linha portável com:
printf '244\n'
E se você quiser que ele seja convertido para a codificação correta da localidade, isso seria:
printf '244\n' | iconv -f UTF-8
O POSIX não especifica qual codificação de caracteres pode ser suportada em um sistema, nem seu nome, mas o comando acima normalmente funcionaria em sistemas POSIX que suportam a codificação UTF-8.