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
'Programing' 카테고리의 다른 글
대표단, 왜? (0) | 2021.01.08 |
---|---|
Django는 외래 키 열에 대한 인덱스를 자동으로 생성합니까? (0) | 2021.01.08 |
Java에서 BigDecimal의 제곱근 (0) | 2021.01.08 |
Gulp-파일 복사 및 이름 변경 (0) | 2021.01.08 |
ASP.NET MVC 3-요청한 .Net Framework 데이터 공급자를 찾을 수 없습니다. (0) | 2021.01.07 |