Estou executando o Arch Linux com terminal simples usando a fonte Adobe Source Code Pro. Minha localidade está definida corretamente como LANG=en_US.UTF-8
.
Quero imprimir caracteres Unicode representando cartas de baralho no meu terminal. Estou usando a Wikipedia para referência .
Os caracteres Unicode para naipes de cartas funcionam bem. Por exemplo, a emissão
$ printf "\u2660"
imprime um coração preto na tela.
No entanto, estou tendo problemas com cartas de baralho específicas. Emissão
$ printf "\u1F0A1"
imprime o símbolo Ἂ1
em vez do ás de espadas ?. O que está acontecendo de errado?
Esse problema persiste em vários terminais (urxvt, xterm, cupim) e em todas as fontes que tentei (DejaVu, Inconsolata).
help printf
adiaprintf(1)
para as sequências de escape interpretadas, e os documentos para GNU printf dizem:Algo semelhante é especificado no manual do Bash para ANSI C Citação e
echo
:Resumindo:
\u
não é para 5 dígitos hexadecimais. É\U
:A resposta de Muru está completamente correta, mas apenas para esclarecer um ponto:
Quando você está imprimindo
\u1F0A1
, isso é interpretado como um escape Unicode de dezesseis bits\u1F0A
, seguido pelo caractere literal1
(já que\u
leva os quatro caracteres a seguir, nem mais, nem menos). U + 1F0A então dáἊ
, um alfa grego com alguns diacríticos nele ( Letra maiúscula grega Alpha com Psili e Varia , para ser preciso).Se você quiser mais de dezesseis bits em seu escape Unicode, você precisa usar
\U
, que leva oito caracteres de hexadecimal:\U0001F0A1
lhe dará a carta do jogo.