UTF-8의 MB_CUR_MAX가 4가 아닌 6인 이유는 무엇입니까? (리눅스, glibc)

UTF-8의 MB_CUR_MAX가 4가 아닌 6인 이유는 무엇입니까? (리눅스, glibc)

MB_CUR_MAXglibc에 의해 "현재 로케일에서 멀티바이트 문자의 최대 바이트 수를 나타내는 양의 정수 표현"으로 정의됩니다.

내가 얻는 값을 인쇄하면 1. C내 시스템의 로케일이 .임에도 불구하고 C가 기본적으로 로케일을 사용하기 때문이라고 생각합니다 en_US.UTF-8.

이것을 내 프로그램에 추가하면 setlocale(LC_ALL, "")환경의 로케일 사용이 활성화 MB_CUR_MAX되고 6.

이제 내 질문은 왜 6입니까? UTF-8에는 코드 포인트당 1~4바이트의 인코딩이 없나요?

답변1

~에 따르면위키피디아, UTF-8은 RFC 3629에 몇 가지 제한 사항이 추가된 2003년까지 최대 6바이트가 필요했습니다.

UTF-8은 1993년 1월 25일부터 29일까지 샌디에고에서 열린 USENIX 컨퍼런스에서 처음 공식적으로 제안되었습니다. 인터넷 엔지니어링 태스크포스(Internet Engineering Task Force)는 RFC 2277(BCP 18) 문자 세트 및 언어 정책에서 미래 인터넷을 위한 UTF-8 표준을 채택하기 위해 노력하고 있습니다.

[위 표는 "UTF-8 (1993)"로 표시되어 있으며 U+4000000부터 U+7FFFFFFFF까지의 코드 포인트에 6바이트가 필요함을 보여줍니다.]

2003년 11월, UTF-8은 UTF-16 문자 인코딩의 제약 조건과 일치하도록 RFC 3629에 의해 제한되었습니다. 즉, 상위 및 하위 대리 문자에 해당하는 코드 포인트는 3바이트 시퀀스의 3% 이상을 삭제하고 다음으로 끝나는 것이 명시적으로 금지되었습니다. U+10FFFF4바이트 시퀀스의 48% 이상과 5바이트 ​​및 6바이트 시퀀스가 ​​모두 제거되었습니다.

관련 정보