Programing

UTF-8은 0 바이트를 포함 할 수 있습니까?

lottogame 2021. 1. 8. 07:43
반응형

UTF-8은 0 바이트를 포함 할 수 있습니까?


UTF-8 문자열에 0 바이트가 포함될 수 있습니까? ascii 일반 텍스트 프로토콜을 통해 보내겠습니다. base64와 같은 형식으로 인코딩해야합니까?


예, UTF8의 0 바이트는 코드 포인트 0, NUL입니다. 안에 0 바이트를 사용하여 UTF8로 인코딩되는 다른 유니 코드 코드 포인트 없습니다 .

가능한 코드 포인트와 해당 UTF8 인코딩은 다음과 같습니다.

Range              Encoding  Binary value
-----------------  --------  --------------------------
U+000000-U+00007f  0xxxxxxx  0xxxxxxx

U+000080-U+0007ff  110yyyxx  00000yyy xxxxxxxx
                   10xxxxxx

U+000800-U+00ffff  1110yyyy  yyyyyyyy xxxxxxxx
                   10yyyyxx
                   10xxxxxx

U+010000-U+10ffff  11110zzz  000zzzzz yyyyyyyy xxxxxxxx
                   10zzyyyy
                   10yyyyxx
                   10xxxxxx

당신이 볼 수 있는 모든 모든 mutibyte 시퀀스는 모든 바이트 1의 높은 비트있는 동안 비 제로 ASCII 문자를 그대로 표시됩니다.

ASCII 일반 텍스트 프로토콜이 비 ASCII 문자를 나쁘게 처리하지 않도록주의해야 할 수도 있습니다 ( 모든 비 ASCII 코드 포인트 가 될 것이기 때문입니다 ).


UTF-8로 인코딩 된 문자열은 백업 메모리의 지정된 바이트 위치에서 0x00에서 0xff까지의 대부분의 값을 가질 수 있습니다 (몇 가지 특정 조합은 허용되지 않지만 http://en.wikipedia.org/wiki/UTF-8 및 옥텟 값 C0, C1, F5 ~ FF는 나타나지 않음).

바이너리 데이터를 지원하지 않는 ASCII 스트림과 같은 채널을 통해 전송하는 경우 적절하게 인코딩해야합니다. Base64는 광범위하게 지원되며 데이터를 인코딩하는 데 64 문자 공간을 사용하기 때문에 완전히 효율적이지는 않지만 ASCII는 128 문자 공간을 허용합니다.

기본 91 인코딩을 제공하는 sourceforge 프로젝트가 있습니다. 이는 인쇄 할 수없는 문자를 피하면서 공간 효율적입니다. http://base91.sourceforge.net/


ASCII 텍스트는 0에서 127 사이의 바이트 값으로 제한됩니다. UTF-8 텍스트에는 이러한 제한이 없습니다. UTF-8로 인코딩 된 텍스트는 상위 비트 세트를 가질 수 있습니다. 따라서 높은 비트에 대한 안전한 통과를 보장하지 않는 채널을 통해 UTF-8 텍스트를 보내는 것은 안전하지 않습니다.

ASCII 전용 채널을 처리해야하는 경우 Base-64가 합리적인 선택입니다 (특히 공간 효율적이지는 않음). 그래도 7 비트 데이터로 제한되어 있습니까? 오늘날에는 다소 드문 일입니다.

참조 URL : https://stackoverflow.com/questions/6907297/can-utf-8-contain-zero-byte

반응형