는 최근 Tom Scott from Computerphile talk about UTF-8을 봤어 그 후에 연구의 비트는 UTF-8은 각 바이트에 대해 다음 헤더를 사용하여, 최대 6 바이트 문자를 인코딩 할 수 있습니다 이해 :언어가 UTF-8을 어떻게 표현합니까?
0xxx xxxx # 1 Byte character
110x xxxx # 2 Byte character
1110 xxxx # 3 Byte character
1111 0xxx # 4 Byte character
1111 10xx # 5 Byte character
1111 110x # 6 Byte character
그리고 여분의 바이트를 표현하기 위해 10xx xxxx
을 사용했다. (나는 RFC3629가 이것을 단지 4 바이트까지만 제한한다는 것을 알고있다.)
그렇다면 2,164,286 개의 다른 문자가 인코딩 될 수 있음을 이해하면 (예약 된 문자 무시)?
이론적0xxx xxxx # 7 bits => 128
110x xxxx # 5 bits + 6 bits = 11 bits => 2,048
1110 xxxx # 4 bits + 6*2 bits = 16 bits => 65,536
1111 0xxx # 3 bits + 6*3 bits = 21 bits => 2,097,152
# == 2,164,864
I은 UTF-8 인코딩 문자열을 저장할 char
배열을 사용할 수도 있고, I 대신 UTF-32 등의 고정 길이 부호화를 사용할 수 있으며, 각 UTF 인코딩하는 등 unsigned long
어떤 4 바이트 타입을 사용 -8 인코딩 된 문자를 사용하지만 1 또는 2 바이트로 인코딩 된 UTF-8 문자 만 사용하는 텍스트의 경우 메모리가 크게 증가합니다. UTF-8 언어를 어떻게 캐릭터의 다양한 길이를 나타낼 수 있다면 (우리는 범위를 제한하는 C++를 할게요 내가 std::string
생각
이 UTF-8의 저장을 허용하고이 size
및 length
반환 바이트 길이가됩니다 만, 이 질문의)이 문자를 내부적으로 인코딩합니다 (예 : std::string
)?
까지 및 변환을 담당하는 API가 있습니다. 예 :'MultiByteToWideChar'와'WideCharToMultiByte'. – Raindrop7
@ Raindrop7은 사실 일지 모르지만 배경에서 무슨 일이 벌어지고 있는지에 대한 질문에 실제로 대답하지 않습니다. –
올바른데, 유니 코드는 현재 21 비트 코드 포인트 만 허용합니다 (2^16 코드 포인트의 17 개 평면 만 실제로 가능합니다 지정된 32 중에서). –