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

6

UTF-8可以用1、2或4个字节进行编码。在我的系统上,一个char占用1个字节。我应该使用wchar_t作为预防措施,以便能够容纳任意的UTF-8编码字符吗?


不是必须的。请参考:https://dev59.com/wXE95IYBdhLWcg3wkekf - lulyon
wchar_t 通常是2个字节,而不是4个字节。 - Yakk - Adam Nevraumont
不要。请参考http://utf8everywhere.org了解您应该做什么 :) - Pavel Radzivilovsky
2个回答

11

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

wchar_t的宽度是与编译器相关的,可以小至8位。因此,需要在任何C或C++编译器之间可移植的程序不应使用wchar_t来存储Unicode文本。

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


3

wchar_t不太适合用于编写可移植代码。

维基百科上:

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

此外,

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接