인쇄되지 않는 비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에서와 같이 네 번째 줄의 시작 부분에서 U+0080, 즉 UTF-8을 나타내는 것을 볼 수 있습니다 M-BM-^@. M-BC2 바이트를 나타냅니다. B는 0x42이므로 M-상위 비트를 설정한다는 의미입니다(즉, 0x80을 추가함). 널 바이트(meta-ctrl-@) 와 기호를 결합하여 M-^@동일한 작업을 수행합니다 .M-x^x

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

관련 정보