UTF-8
유니 코드 의 가변 길이 인코딩 입니다. ASCII 슈퍼 세트로 설계되었습니다. 인코딩에 대한 자세한 내용은 Wikipedia 를 참조하십시오 . \x00 \x01 \xF6 \x15
것 UCS-4BE
또는 UTF-32BE
인코딩.
로케일의 charmap이 UTF-8 (의 출력 참조 locale charmap
) 인 경우 유니 코드 코드 포인트에서 UTF-8 인코딩으로 가져 오려면 다음과 같습니다.
$ printf '\U1F615\n'
😕
$ echo -e '\U1F615'
😕
$ confused_face=$'\U1F615'
후자 는 POSIX 표준의 다음 버전에있을 것입니다 .
AFAIK는, 그 구문은 독립 실행 형 GNU에 의해 2000 년에 도입 printf
합니다 (반대 유틸리티 printf
에 가져온 GNU 쉘 유틸리티) echo
/ printf
/ $'...'
첫 번째 내장 명령 에 의해 zsh
2003 년에 불구하고 2010 년, 2004 년의 경우 ksh93, bash는 ( 제대로가 작동하지 2014 년까지 )이지만 다른 언어에서 영감을 얻은 것 같습니다.
ksh93
또한으로 지원 printf '\x1f615\n'
하고 printf '\u{1f615}\n'
.
$'\uXXXX'
및 $'\UXXXXXXXX'
지원하는 zsh
, bash
, ksh93
, mksh
와 FreeBSD sh
, GNU printf
, GNU echo
.
POSIX는 더 적은 자릿수를 허용하므로 향후 버전에서는 변경 될 가능성이 있지만 일부는 모든 자릿수 (와 \U0001F615
반대로 \U1F615
) 가 필요합니다 . (가) 경우 어떤 경우에, 당신은 모든 숫자를 필요 \UXXXXXXXX
와 같이 16 진수 다음에 될 \U0001F615FOX
대로 \U1F615FOX
했을 것이다 $'\U001F615F'OX
.
일부는 문자열이 구문 분석 될 때 또는 확장 될 때 현재 로케일 인코딩의 문자로 확장되며 일부는 로케일에 관계없이 UTF-8로만 확장됩니다. 현재 로캘의 인코딩에서 문자를 사용할 수없는 경우 동작은 셸마다 다릅니다.
따라서 최상의 이식성을 위해 UTF-8 로케일에서만 사용하고 모든 숫자를 사용하고 다음에서 사용하는 것이 가장 좋습니다 $'...'
.
printf '%s\n' $'\U0001F615'
참고 :
LC_ALL=C.UTF-8; printf '%s\n' $'\U0001F615'
또는:
{
LC_ALL=C.UTF-8
printf '%s\n' $'\U0001F615'
}
(을 포함한 모든 쉘에서 작동하지 않음 bash
(가) 때문에) $'\U0001F615'
되어 구문 분석 하기 전에 LC_ALL
할당됩니다. (또한 시스템 로케일라는 하리라는 보장이 없다 있습니다 C.UTF-8
)
필요한 것 :
LC_ALL=C.UTF-8; eval "confused_face=$'\U0001F615'"
또는:
LC_ALL=C.UTF-8
printf '%s\n' $'\U0001F615'
(복합 명령 또는 기능 내에 있지 않음).
반대로 UTF-8 인코딩에서 유니 코드 코드 포인트로 가져 가려면 이 다른 질문 이나 그 질문을 참조하십시오 .
$ unicode 😕
U+1F615 CONFUSED FACE
UTF-8: f0 9f 98 95 UTF-16BE: d83dde15 Decimal: 😕
😕
Category: So (Symbol, Other)
Bidi: ON (Other Neutrals)
$ perl -CA -le 'printf "%x\n", ord shift' 😕
1f615
\U1F615
유효한 다른 16 진수가 뒤에 오는 경우 이스케이프 시퀀스의 일부로 간주됩니다. 뒤에 오는 내용에 관계없이 작동하려면 정확히 8 자리가되기에 충분한 선행 0이 있어야합니다.\U0001F615