J'utilise Arch Linux avec un terminal simple en utilisant la police Adobe Source Code Pro. Mes paramètres régionaux sont correctement définis sur LANG=en_US.UTF-8
.
Je souhaite imprimer des caractères Unicode représentant des cartes à jouer sur mon terminal. J'utilise Wikipedia pour référence .
Les caractères Unicode pour les combinaisons de cartes fonctionnent bien. Par exemple, l'émission
$ printf "\u2660"
imprime un cœur noir à l'écran.
Cependant, j'ai des problèmes avec des cartes à jouer spécifiques. Délivrance
$ printf "\u1F0A1"
imprime le symbole Ἂ1
au lieu de l'as de pique ????. Qu'est-ce qui ne va pas?
Ce problème persiste sur plusieurs terminaux (urxvt, xterm, termite) et toutes les polices que j'ai essayées (DejaVu, Inconsolata).
help printf
Passe à printf(1)
pour les séquences d'échappement interprétées, et les documents pour GNU printf dit:
printf
interprète deux syntaxes de caractères introduites dans ISO C 99:\u
pour les caractères Unicode 16 bits (ISO/IEC 10646), spécifiés en quatre chiffres hexadécimaux hhhh , et\U
pour les caractères Unicode 32 bits, spécifiés en huit chiffres hexadécimaux hhhhhhhh .printf
affiche les caractères Unicode en fonction des paramètres régionauxLC_CTYPE
. Les caractères Unicode dans les plages U + 0000… U + 009F, U + D800… U + DFFF ne peuvent pas être spécifiés par cette syntaxe, sauf pour U + 0024 ($), U + 0040 (@) et U + 0060 (`) .
Quelque chose de similaire est spécifié dans le manuel de Bash pour ANSI C Quoting et echo
:
\uHHHH
le caractère Unicode (ISO/IEC 10646) dont la valeur est la valeur hexadécimale [~ # ~] hhhh [~ # ~] ( un à quatre chiffres hexadécimaux)
\UHHHHHHHH
le caractère Unicode (ISO/IEC 10646) dont la valeur est la valeur hexadécimale [~ # ~] hhhhhhhh [~ # ~] ( un à huit chiffres hexadécimaux)
En bref: \u
N'est pas pour 5 chiffres hexadécimaux. C'est \U
:
# printf "\u2660 \u1F0A1 \U1F0A1\n"
♠ Ἂ1 ????
La réponse de Muru est complètement correcte, mais juste pour clarifier un point:
Lorsque vous imprimez \u1F0A1
, c'est interprété comme un échappement Unicode de seize bits \u1F0A
, suivi du caractère littéral 1
(depuis \u
prend les caractères quatre suivants, ni plus, ni moins). U + 1F0A donne alors Ἂ
, un alpha grec avec deux diacritiques dessus (lettre majuscule grecque Alpha avec Psili et Varia, pour être précis).
Si vous voulez plus de seize bits dans votre échappement Unicode, vous devez utiliser \U
, qui prend la valeur hexadécimale de huit caractères: \U0001F0A1
vous donnera la carte à jouer.