今天我在学习一些 C++ 基础知识并开始了解wchar_t
. 我无法弄清楚,为什么我们实际上需要这种数据类型,以及如何使用它?
7 回答
wchar_t
用于以固定宽度、多字节编码表示文本;因为wchar_t
通常大小为 2 个字节,所以它可以用来表示任何 2 字节编码的文本。它还可用于以可变宽度多字节编码表示文本,其中最常见的是 UTF-16。
在大小为 4 字节的平台上,wchar_t
它可用于表示使用 UCS-4 (Unicode) 的任何文本,但由于在大多数平台上它只有 2 个字节,它只能以可变宽度编码(通常为 UTF-16)表示 Unicode . char
与可变宽度编码一起使用更为常见,例如 UTF-8 或 GB 18030。
唯一广泛使用的现代操作系统wchar_t
是 Windows;这是因为 Windows 在扩展超过 U+FFFF 之前采用了 Unicode,因此固定宽度的 2 字节编码 (UCS-2) 似乎是明智的。现在 UCS-2 不足以表示整个 Unicode,因此 Windows 使用 UTF-16,仍然使用wchar_t
2 字节代码单元。
wchar_t
是一个宽字符。它用于表示比常规字符需要更多内存来表示它们的字符char
。例如,它广泛用于 Windows API。
但是, a 的大小wchar_t
取决于实现,并不保证大于char
. 如果您需要支持大于 8 位的特定形式的字符格式,您可能需要转向char32_t
并且char16_t
分别保证为 32 位和 16 位。
wchar_t
当您需要存储代码大于 255 的字符时使用(它的值大于char
可以存储的值)。
char
可以取 256 个不同的值,对应于 ISO 拉丁表中的条目。另一方面,宽字符可以接受超过 65536 个与 Unicode 值相对应的值。这是一个最近的国际标准,它允许对几乎所有语言和常用符号的字符进行编码。
wchar_t数据类型用于显示wide characters that will occupy 16 bits
. 此数据类型占用“2 或 4”字节。
wchar_t
当使用像日语这样的国际语言时,通常会使用数据类型。
我知道他们中的大多数人都回答了这个问题,但是当我也在学习 C++ 基础知识并开始了解wchar_t
时,我想告诉你我在搜索后了解的内容。
wchar_t
当您需要存储超过 ASCII 255 的字符时使用,因为这些字符的大小比我们的字符类型 'char' 大。因此,需要更多的内存。例如:
wchar_t var = L"Привет мир\n"; // hello world in russian
它通常具有大于 8 位字符的大小。
Windows 操作系统大量使用它。
它通常在涉及外语时使用。
wchar_t 类型用于扩展字符集的字符。它是与 wstring 一起使用的其他用途之一,它是一个可以包含扩展字符集的单个字符的字符串,而不是可以包含大小为 char 的单个字符的字符串,或者使用多个字符来表示单个符号(如 utf8 )。
wchar_t 大小取决于语言环境,按照标准,它可以表示语言环境支持的最大扩展字符集的所有成员。
wchar_t
在[basic.fundamental]/p5中的 C++ 语言中指定为:
Type是一种独特的类型,其值可以表示支持的语言环境 ( [locale] ) 中
wchar_t
指定的最大扩展字符集的所有成员的不同代码。
换句话说,wchar_t
它是一种数据类型,它可以处理包含来自任何语言的字符的文本,而无需担心字符编码。
在基本多语言平面之上支持 Unicode 的平台上,wchar_t
通常是 4 个字节(Linux、BSD、macOS)。
wchar_t
由于历史原因,仅在 Windows 上为 2 个字节并使用 UTF-16LE 编码(Windows 最初仅支持 UCS2)。
在实践中,“1 wchar_t
= 1 个字符”的概念变得更加复杂,因为 Unicode 支持组合字符和字素(由代码点序列表示的字符)。