확장 코드가 포함된 텍스트를 복사하여 xterm(실제로는 xfce4-terminal)에 붙여넣을 수 있으며 제대로 표시됩니다. 확장 문자를 16진수 편집기에 파이프하면 멋지게 표시됩니다. 예를 들어 16진수로 된 "Stéphane"은 "53 74 c3 a9 70 68 61 6e 65 0a"로 나타납니다. - 액센트가 있습니다. "e"는 16진수로 c3이며 모든 것이 정상입니다. 하지만 xterm에서 확장 코드를 작성하는 방법을 모르겠습니다. " echo $'\xc3' "의 모든 변형을 시도했지만 아무것도 작동하지 않습니다.
답변1
é
입장 하세요 echo -e "\xC3\xA9"
.
xterm이 UTF-8 인코딩으로 설정되어 있다고 가정하면 인쇄하려는 문자의 UTF-8 16진수 인코딩을 찾을 수 있습니다.https://www.utf8-chartable.de/.
답변2
2바이트 시퀀스 0xc3 0xa9는 급성 U+00E9 문자를 é
사용하여 사전 조립된 UTF-8 인코딩입니다.e
locale charmap
터미널 에뮬레이터가 반환된 환경 UTF-8
(예: fr_FR.UTF-8
로케일) 에서 실행 되기 때문에 해당 문자 집합을 사용하도록 구성된 경우 다음과 같은 결과를 얻게 됩니다.
ISO8859-1 또는 ISO8859-15 문자 집합(예: 로케일)을 사용하도록 구성된 터미널에서는 fr_FR.iso885915@euro
0xe9 바이트를 얻게 됩니다. zh_HK.big5hkscs
로케일 에서는 0x88 0x6d 등을 얻게 됩니다.
존재하다 zsh
:
print '\ue9'
printf '\ue9\n'
echo '\ue9'
로케일의 문자 맵에 인코딩된 U+00E9 문자를 인쇄합니다(후자는 bsdecho
옵션이 활성화되지 않은 경우에만 필요하며 이 경우 이를 사용해야 합니다 -e
. 일반적으로 echo
이식할 수 없는 명령이므로 피하는 것이 가장 좋습니다).
또한 이러한 내장 함수에 유니코드 코드 포인트에 따라 문자를 출력하는 대신 특정 문자 집합의 문자 인코딩에 해당하는 바이트를 인쇄하도록 요청할 수도 있습니다.
누구나:
print -r -- 'é'
printf '%s\n' 'é'
echo -E - 'é'
우리는 바이트를 터미널에 입력으로 그대로 전달하고 \
해당 -r
/ -E
옵션을 사용하여 확장을 비활성화하거나 확장할 수 있도록 8진수 또는 16진수 바이트 값을 제공합니다. 예를 들어, é
이 문자의 UTF-8 인코딩의 경우:
print '\xc3\xa9' # hex
print '\303\251' # octal
printf '\xc3\xa9\n' # hex
printf '\303\251\n' # octal (POSIX)
echo '\xc3\xa9' # hex
echo '\0303\0251' # note the extra 0s
printf '%b\n' '\0303\0251' # printf's %b recognises the same escapes
# as echo. Was introduced by POSIX to help
# people transition away from echo AFAIK.
또는 $'...'
쉘이 동일한 이스케이프 시퀀스(이스케이프 시퀀스가 아닌 일반 이스케이프 시퀀스 echo
)를 지원하는 인용 형식을 사용하고 유틸리티에 전달하기 전에 확장할 수 있습니다.
print -r -- $'\ue9' # expanded to eacute character in the locale's charmap
print -r -- $'\xc3\xa9' # passing the UTF-8 encoding of eacute
print -r -- $'\xe9' # passing the ISO8859-1 encoding of eacute
$'...'
sh
(원래 ksh93에서) 는 언어 POSIX 사양의 다음 버전 에 포함될 예정이지만 , 이 $'\uxxxx'
부분(원래 zsh에서)은 확장하기 위해 사용할 Charmap과 무엇을 지원하는 구현 간에 합의가 없기 때문에 포함되지 않습니다. Consensus 이 문자표에 해당 문자가 없으면 이 작업을 수행합니다. zsh의 경우 이는 명령이 실행될 때 적용되는 로케일에 대한 문자 맵입니다. 문자가 없으면 치명적인 오류입니다.
¹ 분해된 버전과 혼동하지 마십시오. UTF-8을 포함하여 ASCII의 상위 집합인 모든 문자 세트에서 0x65로 인코딩된 é
두 문자(U+0065)로 구성됩니다.e
날카로운 악센트와 결합U+0301 문자는 UTF-8에서 0xcc 0x81로 인코딩됩니다.