UTF-8 可以编码为 1、2 和最多 4 个字节。我系统上的单个char
是 1 个字节。我应该wchar_t
作为预防措施使用,以便能够适应任意 UTF-8 编码的字符吗?
问问题
10480 次
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 回答