为什么 UTF-8 的 MB_CUR_MAX 是 6 而不是 4? (Linux、glibc)

为什么 UTF-8 的 MB_CUR_MAX 是 6 而不是 4? (Linux、glibc)

MB_CUR_MAX被 glibc 定义为“一个正整数表达式,它是当前语言环境中多字节字符的最大字节数”。

如果我打印我得到的值1。我认为这是因为 CC默认使用语言环境,即使我系统的语言环境是en_US.UTF-8.

如果我添加setlocale(LC_ALL, "")到我的程序中,它应该启用使用环境的区域设置,然后MB_CUR_MAX变成6.

现在我的问题是,为什么是 6? UTF-8 不是每个代码点有 1 到 4 个字节的编码吗?

答案1

根据维基百科,直到 2003 年,UTF-8 确实需要最多 6 个字节,当时 RFC 3629 添加了一些限制:

UTF-8 于 1993 年 1 月 25 日至 29 日在圣地亚哥举行的 USENIX 会议上首次正式提出。互联网工程任务组在 RFC 2277 (BCP 18) 的字符集和语言政策中为未来的互联网采用了 UTF-8标准工作[...]

[上表标有“UTF-8 (1993)”,显示表示从 U+4000000 到 U+7FFFFFFF 的代码点需要 6 个字节]

2003年11月,UTF-8受到RFC 3629的限制,以匹配UTF-16字符编码的约束:明确禁止高低代理字符对应的码点删除超过3%的三字节序列,并结束在 U+10FFFF删除了超过 48% 的四字节序列以及所有五字节和六字节序列。

相关内容