C11 Unicode 支持

标签 c unicode c11

我正在编写一些类似于atoi()strtoll() 的字符串转换函数。我想包含一个可以接受 char16_t* 或 char32_t* 而不仅仅是 char* 或 wchar_t* 的函数版本。

我的函数工作正常,但在编写它时我意识到我不明白 char16_t 或 char32_t 是什么。我知道标准只要求它们分别是至少 16 位或 32 位的整数类型,但暗示它们是 UTF-16 或 UTF-32。

我也知道该标准定义了几个函数,但它们不包含任何 *get 或 *put 函数(就像它们在 C99 中添加到 wchar.h 时那样)。

所以我想知道:他们希望我用 char16_t 和 char32_t 做什么?

最佳答案

这是个好问题,没有明显的答案。

C11 中添加的uchar.h 类型和函数基本上没有用。它们只支持新类型(char16_tchar32_t)和区域特定的、实现定义的多字节编码之间的转换,除非区域设置基于UTF-8。不支持有用的转换(到/从 wchar_t 和到/从 UTF-8)。当然,您可以自己进行与 UTF-8 的转换,因为这些转换 100% 由相关的 RFC/UCS/Unicode 标准指定,但要小心:大多数人实现错误并存在危险的错误。

请注意,针对 UTF-8、UTF-16 和 UTF-32 文字的新编译器级功能(u8u , 和 U,分别)可能有用;您可以以完全不依赖于区域设置的有意义的方式使用您自己的函数处理结果字符串。但在我看来,C11 中对 Unicode 的库级支持基本上是无用的。

关于C11 Unicode 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26106647/

相关文章:

缓存模拟器::命中与未命中问题

c - 是使用任何未定义的不确定值还是仅使用存储在具有自动存储的对象中的值?

c - 在 C 中传递结构的正确方法

c - 定位给定文件中的所有子字符串实例

python - 将 datetime.ctime() 值转换为 Unicode

Python Unicode CSV 在引号之间带有换行符

python - 处理包含多个字符编码的字符串

c++ - 构建 main.c 和 main.cpp 的单个 Makefile

c - 参数声明限制和编译器警告

c - 空字符串如何存储在 char 数组中?