비인쇄 비ASCII UTF 문자에 대한 `cat -v`

비인쇄 비ASCII UTF 문자에 대한 `cat -v`

cat인쇄되지 않는 문자를 캐럿 표기법으로 변환하는 옵션이 있습니다 -v(터미널이 출력에서 ​​제어 문자를 문자 그대로 해석하는 것을 원하지 않는 경우 유용합니다 cat).

그러나 내가 이해하는 바에 따르면 캐럿 표기법은 ASCII 알파벳의 인쇄되지 않는 문자에만 적용됩니다. 그렇다면 ASCII에 속하지 않는 UTF의 인쇄되지 않는 문자는 어떻습니까(예:https://www.compart.com/en/unicode/category/Cc)? cat -v이를 표시하기 위해 어떤 표기법을 사용합니까 ?

답변1

다음을 사용하여 UTF-8의 처음 256개 유니코드 문자를 포함하는 파일을 생성할 수 있습니다.

python3 -c 'for x in range(0,255): print(chr(x), end="")' > unicode-file

여기에는 Latin-1 Supplement의 비ASCII(C1) 컨트롤과 다양한 인쇄 문자가 포함됩니다.

이제 우리는 cat -v그것을 할 수 있습니다:

^@^A^B^C^D^E^F^G^H
^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_ !"#$%&'()*+,-./0123456789:;
<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^?
M-BM-^@M-BM-^AM-BM-^BM-BM-^CM-BM-^DM-BM-^EM-BM-^FM-BM-^GM-BM-^HM-BM-^I
M-BM-^JM-BM-^KM-BM-^LM-BM-^MM-BM-^NM-BM-^OM-BM-^PM-BM-^QM-BM-^RM-BM-^S
M-BM-^TM-BM-^UM-BM-^VM-BM-^WM-BM-^XM-BM-^YM-BM-^ZM-BM-^[M-BM-^\M-BM-^]
M-BM-^^M-BM-^_M-BM- M-BM-!M-BM-"M-BM-#M-BM-$M-BM-%M-BM-&M-BM-'M-BM-(M-B
M-)M-BM-*M-BM-+M-BM-,M-BM--M-BM-.M-BM-/M-BM-0M-BM-1M-BM-2M-BM-3M-BM-4M-B
M-5M-BM-6M-BM-7M-BM-8M-BM-9M-BM-:M-BM-;M-BM-<M-BM-=M-BM->M-BM-?M-CM-^@
M-CM-^AM-CM-^BM-CM-^CM-CM-^DM-CM-^EM-CM-^FM-CM-^GM-CM-^HM-CM-^IM-CM-^J
M-CM-^KM-CM-^LM-CM-^MM-CM-^NM-CM-^OM-CM-^PM-CM-^QM-CM-^RM-CM-^SM-CM-^T
M-CM-^UM-CM-^VM-CM-^WM-CM-^XM-CM-^YM-CM-^ZM-CM-^[M-CM-^\M-CM-^]M-CM-^^
M-CM-^_M-CM- M-CM-!M-CM-"M-CM-#M-CM-$M-CM-%M-CM-&M-CM-'M-CM-(M-CM-)M-C
M-*M-CM-+M-CM-,M-CM--M-CM-.M-CM-/M-CM-0M-CM-1M-CM-2M-CM-3M-CM-4M-CM-5M-C
M-6M-CM-7M-CM-8M-CM-9M-CM-:M-CM-;M-CM-<M-CM-=M-CM->

(읽을 수 있도록 수동으로 포장했습니다)

C2 80와 같이 네 번째 줄의 시작 부분인 UTF-8 에서 U+0080 을 나타내는 것을 볼 수 있습니다 M-BM-^@. M-BC2 바이트를 나타냅니다. B는 0x42이므로 M-상위 비트 설정(즉, 0x80 추가)을 나타냅니다. M-^@널 바이트(meta-ctrl-@)에 대해서도 동일한 작업을 수행합니다. M-x^x표기법이 함께 결합됩니다.

UTF-8의 높은 바이트로 완전히 구성되거나 다른 인코딩의 모든 바이트 128-255로 구성되는 모든 비 ASCII 코드 포인트에 대해서도 동일한 일이 발생합니다. 다양한 cat구현에는 다음과 같은 고유한 동작이 있을 수 있습니다.-v 아니다표준 cat옵션이지만 GNU cat과 일반 BSD 버전 모두 이런 방식으로 동작합니다.

관련 정보