MB_CUR_MAX
glibc에 의해 "현재 로케일에서 멀티바이트 문자의 최대 바이트 수를 나타내는 양의 정수 표현"으로 정의됩니다.
내가 얻는 값을 인쇄하면 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바이트 시퀀스가 모두 제거되었습니다.