UTF-8可以编码1,2和最多4个字节。我系统上的一个char
是1个字节。我应该使用wchar_t
作为预防措施,这样我才能适应任意UTF-8编码字符吗?
答案 0 :(得分:10)
wchar_t
的宽度是特定于编译器的,可以小到8位。因此,需要在任何C或C ++编译器上移植的程序不应使用wchar_t
来存储Unicode文本。
在大多数情况下,UTF-8文本的“字符性质”与您的程序无关,因此将其视为char
元素数组,就像任何其他字符串一样,就足够了。但是,如果需要提取单个字符,则应将这些字符存储为至少24位宽的类型(例如uint32_t
),以便容纳所有Unicode代码点。
答案 1 :(得分:2)
wchar_t
没什么用处。
wchar_t的宽度是特定于编译器的,可以小到8 位。因此,需要可以在任何C或C语言上移植的程序 C ++编译器不应使用wchar_t来存储Unicode文本。该 wchar_t类型用于存储编译器定义的宽字符, 在某些编译器中可能是Unicode字符“
此外,
C和C ++在其各自标准的2011版本中引入了固定大小的字符类型char16_t
和char32_t
,以提供16位和32位Unicode转换格式的明确表示,留下{ {1}}实现定义。