5

UTF-8 可以编码为 1、2 和最多 4 个字节。我系统上的单个char是 1 个字节。我应该wchar_t作为预防措施使用,以便能够适应任意 UTF-8 编码的字符吗?

4

2 回答 2

11

不,你不应该!Unicode 4.0 标准 (ISO 10646:2003) 指出:

的宽度wchar_t是编译器特定的,可以小到 8 位。因此,需要在任何 C 或 C++ 编译器之间移植的程序不wchar_t应用于存储 Unicode 文本。

在大多数情况下,UTF-8 文本的“字符性质”与您的程序无关,因此将其视为char元素数组,就像任何其他字符串一样,就足够了。但是,如果您需要提取单个字符,则这些字符应存储在至少 24 位宽的类型中(例如,uint32_t),以便容纳所有 Unicode 代码点。

于 2013-07-26T02:33:01.213 回答
2

wchar_t如果你想让你的代码可移植,它没有多大用处。

维基百科上

wchar_t 的宽度是特定于编译器的,可以小到 8 位。因此,需要在任何 C 或 C++ 编译器之间移植的程序不应使用 wchar_t 来存储 Unicode 文本。wchar_t 类型用于存储编译器定义的宽字符,在某些编译器中可能是 Unicode 字符”

更远 ,

C 和 C++ 都引入了固定大小的字符类型char16_t,并char32_t在各自标准的 2011 年修订版中提供了 16 位和 32 位 Unicode 转换格式的明确表示,而wchar_t实现定义。

于 2013-07-26T02:32:41.380 回答