特定のUnicode文字が私の端末に印刷されないのはなぜですか?

特定のUnicode文字が私の端末に印刷されないのはなぜですか?

私は単純な端末を介してArch Linuxを実行するためにAdobe Source Code Proフォントを使用しています。私のロケールがに正しく設定されていますLANG=en_US.UTF-8

トランプを表すUnicode文字を私の端末に印刷したいです。私はそれを使用しています参考用ウィキペディア

カードスーツのUnicode文字はうまく機能します。たとえば、問題

$ printf "\u2660"

画面に黒いハートを印刷します。

しかし、特定のカードに問題があります。発行された

$ printf "\u1F0A1"

Ἂ1スペードエースの代わりにシンボルを印刷

ベストアンサー1

help printf解釈されたエスケープシーケンスに従いprintf(1)GNU printfのドキュメント説明する:

printfISO C 99で導入された2つの文字構文の説明: \u16ビットUnicode(ISO / IEC 10646)文字の場合は、4桁の16進数で指定されていますヘヘ\U32ビットのUnicode文字の場合は、8桁の16進数で指定されます。はははは。 Unicode文字はロケール設定printfに従って出力されます。LC_CTYPEこの構文は、U+0024($)、U+0040(@)、U+0060(`) を除いて U+0000… U+009F、U+D800… U + DFFF範囲のUnicode文字を指定できません。

Bashのマニュアルは同様のものを指定しますANSI C見積もりそしてecho:

\uHHHH
値が16進値のUnicode(ISO / IEC 10646)文字はははは(1~4個の16進数)

\UHHHHHHHH
値が16進値のUnicode(ISO / IEC 10646)文字ハハハハハハハ(1~8桁の16進数)

つまり、\u5桁の16進数では機能しません。それは\U

# printf "\u2660 \u1F0A1 \U1F0A1\n"
♠ Ἂ1 

おすすめ記事