간단한 터미널을 통해 Arch Linux를 실행하기 위해 Adobe Source Code Pro 글꼴을 사용하고 있습니다. 내 로캘이 으로 올바르게 설정되어 있습니다 LANG=en_US.UTF-8
.
카드 놀이를 나타내는 유니코드 문자를 내 터미널에 인쇄하고 싶습니다. 나는 그것을 사용하고 있다참고용 위키피디아.
카드 슈트의 유니코드 문자는 잘 작동합니다. 예를 들어, 문제
$ printf "\u2660"
화면에 검은색 하트를 인쇄합니다.
그러나 특정 카드에 문제가 있습니다. 발행 된
$ printf "\u1F0A1"
Ἂ1
스페이드 에이스 대신 기호 인쇄
답변1
help printf
해석된 이스케이프 시퀀스를 따르고 printf(1)
,GNU printf에 대한 문서설명하다:
printf
ISO C 99에 도입된 두 가지 문자 구문 설명:\u
16비트 유니코드(ISO/IEC 10646) 문자의 경우 4자리 16진수로 지정됨헤헤,\U
32비트 유니코드 문자의 경우 8자리 16진수로 지정됩니다.하하하하. 유니코드 문자는 로케일 설정printf
에 따라 출력됩니다.LC_CTYPE
이 구문은 U+0024($), U+0040(@) 및 U+0060(`)을 제외하고 U+0000…U+009F, U+D800…U+DFFF 범위의 유니코드 문자를 지정할 수 없습니다.
Bash 매뉴얼은 비슷한 것을 지정합니다ANSI C 견적그리고echo
:
\uHHHH
값이 16진수 값인 유니코드(ISO/IEC 10646) 문자하하하하(1~4개의 16진수)
\UHHHHHHHH
값이 16진수 값인 유니코드(ISO/IEC 10646) 문자하하하하하하(1~8자리 16진수)
즉, \u
5자리 16진수에서는 작동하지 않습니다. 그것은 \U
:
# printf "\u2660 \u1F0A1 \U1F0A1\n"
♠ Ἂ1
답변2
Muru의 답변은 완전히 정확하지만 명확히 하기 위해 다음과 같이 설명합니다.
인쇄하면 \u1F0A1
16비트 유니코드 이스케이프 \u1F0A
와 리터럴 문자로 해석됩니다 1
( \u
왜냐하면4개그 이상도 그 이하도 아닌 문자). U+1F0A는 Ἂ
여러 발음 구별 부호가 있는 그리스 문자 를 제공합니다(Psili 및 Varia가 포함된 그리스 대문자 Alpha, 정확히 말하면).
유니코드 이스케이프에서 16비트 이상을 원하면 Poker를 사용해야 합니다. 여기 \U
에는 8자리 16진수 값이 필요합니다.\U0001F0A1