是否有 unicode/wide 个编码为多个编码字符的字符
Are there any unicode/wide chars that encode to multiple encoded characters
考虑 wctomb(),它采用宽字符并编码为当前选定的字符集。 glibc 手册页指出输出缓冲区应为 MB_CUR_MAX,而 FreeBSD 手册页指出输出缓冲区大小应为 MB_LEN_MAX。哪个是正确的?
是否有任何使用多个编码字符来表示宽字符的宽 char/encoding 组合示例?
更笼统地说,MB_CUR_MAX 是指表示宽字符的最大组合编码字符字节数,还是仅表示任何特定编码字符的最大字节数?
MB_CUR_MAX
是正确的,但两者都足够大。如果您想避免可变长度数组声明,您可能需要使用 MB_LEN_MAX
。
MB_CUR_MAX
是当前语言环境 中多字节字符的最大字节数。 MB_LEN_MAX
是 任何支持的语言环境 的字符中的最大字节数。与 MB_CUR_MAX
不同,MB_LEN_MAX
是一个宏,因此它可以在数组声明中使用而无需创建 VLA。
两个常量都指的是一个宽字符。多字节字符到底是什么没有简单的定义,因为多字节编码可以包含移位序列;如果多字节语言环境包括移位序列,则使用特定宽字符对 wctomb
的特定调用所需的字节数可能因移位状态而异。 (另外,实际代码在不同的换档状态下可能会有所不同。)
据我所知,没有什么可以阻止将宽字符转换为多字节序列,而多字节序列可能可分解为其他多字节序列(与 Unicode 组合一样); wctomb
的定义只涉及 "representation"。但是我也不知道这样做的实现; Unicode 规范分解必须使用单独的 API 来完成。
所以有可能没有安装的语言环境需要像 MB_LEN_MAX
这样大的值。但是没有什么可以阻止您添加区域设置——甚至创建您自己的区域设置——前提是它们不超过编码限制(Linux 上为 16 个字节)。
考虑 wctomb(),它采用宽字符并编码为当前选定的字符集。 glibc 手册页指出输出缓冲区应为 MB_CUR_MAX,而 FreeBSD 手册页指出输出缓冲区大小应为 MB_LEN_MAX。哪个是正确的?
是否有任何使用多个编码字符来表示宽字符的宽 char/encoding 组合示例?
更笼统地说,MB_CUR_MAX 是指表示宽字符的最大组合编码字符字节数,还是仅表示任何特定编码字符的最大字节数?
MB_CUR_MAX
是正确的,但两者都足够大。如果您想避免可变长度数组声明,您可能需要使用 MB_LEN_MAX
。
MB_CUR_MAX
是当前语言环境 中多字节字符的最大字节数。 MB_LEN_MAX
是 任何支持的语言环境 的字符中的最大字节数。与 MB_CUR_MAX
不同,MB_LEN_MAX
是一个宏,因此它可以在数组声明中使用而无需创建 VLA。
两个常量都指的是一个宽字符。多字节字符到底是什么没有简单的定义,因为多字节编码可以包含移位序列;如果多字节语言环境包括移位序列,则使用特定宽字符对 wctomb
的特定调用所需的字节数可能因移位状态而异。 (另外,实际代码在不同的换档状态下可能会有所不同。)
据我所知,没有什么可以阻止将宽字符转换为多字节序列,而多字节序列可能可分解为其他多字节序列(与 Unicode 组合一样); wctomb
的定义只涉及 "representation"。但是我也不知道这样做的实现; Unicode 规范分解必须使用单独的 API 来完成。
所以有可能没有安装的语言环境需要像 MB_LEN_MAX
这样大的值。但是没有什么可以阻止您添加区域设置——甚至创建您自己的区域设置——前提是它们不超过编码限制(Linux 上为 16 个字节)。