![Zsh에서 잘못된 유니코드 문자가 포함된 문자열을 만드는 방법은 무엇입니까?](https://linux55.com/image/78890/Zsh%EC%97%90%EC%84%9C%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C%20%EB%AC%B8%EC%9E%90%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
일부 테스트 목적으로 잘못된 유니코드 문자가 포함된 문자열이 필요합니다. Zsh에서 이러한 문자열을 만드는 방법은 무엇입니까?
답변1
UTF-8로 인코딩된 유니코드 문자를 언급하고 있다고 가정합니다.
그건 당신이 무슨 뜻인지에 따라 달라요유효하지 않은.
invalid_byte_sequence=$'\x80\x81'
이는 UTF-8 인코딩에서 유효하지 않은 바이트 시퀀스입니다(UTF-8 인코딩 문자의 첫 번째 바이트에는 항상 두 개의 가장 높은 비트 세트가 있습니다). 하지만 시퀀스는 문자 중간에서 볼 수 있으므로 다른 유효하지 않은 시퀀스(예:)에 연결되면 결국 유효한 시퀀스를 형성하게 될 수 있습니다 $'\xe1'
. $'\xe1'
또는 $'\xe1\x80'
그 자체가 유효하지 않으며 잘린 문자로 처리될 수 있습니다.
other_invalid_byte_sequence=$'\xc2\xc2'
0xc2 바이트는 2바이트 문자를 시작하며 0xc2는 UTF-8 문자 중간에 있을 수 없습니다. 따라서 유효한 UTF-8 텍스트에서는 시퀀스를 찾을 수 없습니다. UTF-8 인코딩에 전혀 나타나지 않는 바이트와 $'\xc0'
동일 합니다 .$'\xc1'
\uXXXX
및 시퀀스 의 경우 \UXXXXXXXX
현재 로케일의 인코딩이 UTF-8이라고 가정합니다.
non_character=$'\ufffe'
이는 현재 지정된 66개 중 하나입니다.비문자.
not_valid_anymore=$'\U110000'
유니코드는 이제 최대 0x10FFFF의 코드 포인트로 제한됩니다. UTF-8 인코딩은 원래 0x7FFFFFFFF( perl
최대 0xFFFFFFFFFFFFFFFF까지의 변형도 지원됨)를 포함하도록 설계되었지만 현재는 일반적으로 해당 인코딩으로 제한됩니다.
utf16_surrogate=$'\ud800'
코드 포인트 0xD800 ~ 0xDFFF는 UTF16 인코딩용으로 예약된 코드 포인트입니다. 따라서 이러한 코드 포인트의 UTF-8 인코딩은 유효하지 않습니다.
이제 최신 버전의 유니코드에서는 나머지 코드 포인트의 대부분이 여전히 할당되지 않습니다.
unassigned=$'\u378'
최신 버전의 유니코드에는 지정된 새 문자가 포함되어 있습니다. 예를 들어 Unicode 8.0(2015년 6월 출시)