Zsh에서 잘못된 유니코드 문자가 포함된 문자열을 만드는 방법은 무엇입니까?

Zsh에서 잘못된 유니코드 문자가 포함된 문자열을 만드는 방법은 무엇입니까?

일부 테스트 목적으로 잘못된 유니코드 문자가 포함된 문자열이 필요합니다. 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월 출시)

관련 정보