使用UTF-8时我应该使用wchar_t吗?

时间:2013-07-26 02:24:41

标签: c++ unicode utf-8

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

2 个答案:

答案 0 :(得分:10)

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

  

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

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

答案 1 :(得分:2)

如果你想让你的代码可移植,

wchar_t没什么用处。

wikipedia

  

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

此外,

C和C ++在其各自标准的2011版本中引入了固定大小的字符类型char16_tchar32_t,以提供16位和32位Unicode转换格式的明确表示,留下{ {1}}实现定义。