UTF-8 인코딩 문자의 최대 바이트 수는 얼마입니까?
단일 UTF-8 인코딩 문자의 최대 바이트 수는 얼마입니까?
UTF-8로 인코딩 된 String의 바이트를 암호화하므로 UTF-8로 인코딩 된 String의 최대 바이트 수를 계산할 수 있어야합니다.
누군가가 단일 UTF-8 인코딩 문자의 최대 바이트 수를 확인할 수 있습니까?
문자 테이블을 다음으로 제한 한 RFC3629 에 따라 문자 당 최대 바이트 수는 4입니다 U+10FFFF
.
UTF-8에서 U + 0000..U + 10FFFF 범위 (UTF-16 액세스 가능 범위)의 문자는 1-4 옥텟의 시퀀스를 사용하여 인코딩됩니다.
(원래 사양에서는 코드 포인트에 대해 최대 6 바이트 문자 코드를 허용했습니다 U+10FFFF
.)
코드가 128 미만인 문자는 1 바이트 만 필요하고 다음 1920 자 코드는 2 바이트 만 필요합니다. 난해한 언어로 작업하지 않는 한 문자 수에 4를 곱하면 상당한 과대 평가가됩니다.
더 이상의 컨텍스트가 없으면 UTF-8 문자의 최대 바이트 수는 다음과 같습니다.
답변 : 6 바이트
받아 들여진 답변의 저자는 이것을 "원래 사양"이라고 정확하게 지적했습니다. 이는 RFC-2279 1을 통해 유효했습니다 . J. Cocoe가 아래 주석에서 지적했듯이 2003 년에 RFC-3629 2로 변경되었습니다 . 이는 UTF-8을 21 비트 인코딩으로 제한하고 4 바이트를 사용하는 인코딩 체계로 처리 할 수 있습니다.
모든 유니 코드를 포함하는 경우 응답 : 4 바이트
그러나 Java <= v7 에서는 UTF-8로 유니 코드를 나타내는 최대 3 바이트에 대해 이야기합니다. 원래 유니 코드 사양은 기본 다국어 플레인 ( BMP ) 만 정의했기 때문입니다. 즉, 유니 코드의 이전 버전 또는 최신 유니 코드의 하위 집합입니다. 그래서
원래 유니 코드 만 나타내는 경우 BMP : 3 바이트
그러나 OP는 반대 방향으로 이야기합니다. 문자에서 UTF-8 바이트로가 아니라 UTF-8 바이트에서 "문자열"의 바이트 표현으로. 아마도 받아 들여진 대답의 저자는 질문의 맥락에서 그것을 얻었을 것입니다. 그러나 이것이 반드시 명백한 것은 아니므로이 질문의 평범한 독자를 혼란스럽게 할 수 있습니다.
UTF-8에서 네이티브 인코딩으로 이동하면서 "String"이 구현되는 방식을 살펴 봐야합니다. Python> = 3과 같은 일부 언어는 각 문자를 정수 코드 포인트로 나타내므로 문자 당 4 바이트 = 32 비트를 허용하여 유니 코드에 필요한 21 개를 처리 할 수 있습니다. 정확히 21 비트가 아닌 이유는 무엇입니까? 왜냐하면 바이트 정렬이 더 빠르기 때문입니다. Python <= 2 및 Java 와 같은 일부 언어 는 UTF-16 인코딩을 사용하여 문자를 나타냅니다. 즉, BMP가 아닌 확장 유니 코드를 나타내려면 서로 게이트 쌍을 사용해야합니다. 어느 쪽이든 여전히 최대 4 바이트입니다.
UTF-8-> 기본 인코딩 : 4 바이트
따라서 최종 결론은 4가 가장 일반적인 정답이므로 정답입니다. 그러나 마일리지는 다를 수 있습니다.
'Program Tip' 카테고리의 다른 글
간단한 예 (0) | 2020.10.24 |
---|---|
GCD의 블록 내에 NSAutoreleasePool을 만들어야합니까? (0) | 2020.10.24 |
웹팩을 사용하여 디렉토리에서 동적으로 이미지 가져 오기 (0) | 2020.10.24 |
대규모 레거시 (C / C ++) 코드베이스에 단위 테스트를 어떻게 도입합니까? (0) | 2020.10.24 |
Pylint가 내장 함수를 좋아하지 않는 이유는 무엇입니까? (0) | 2020.10.24 |