49

今天我在学习一些 C++ 基础知识并开始了解wchar_t. 我无法弄清楚,为什么我们实际上需要这种数据类型,以及如何使用它?

4

7 回答 7

45

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_t2 字节代码单元。

于 2012-11-22T10:00:19.773 回答
12

wchar_t是一个宽字符。它用于表示比常规字符需要更多内存来表示它们的字符char。例如,它广泛用于 Windows API。

但是, a 的大小wchar_t取决于实现,并不保证大于char. 如果您需要支持大于 8 位的特定形式的字符格式,您可能需要转向char32_t并且char16_t分别保证为 32 位和 16 位。

于 2012-11-22T09:49:58.030 回答
10

wchar_t当您需要存储代码大于 255 的字符时使用(它的值大于char可以存储的值)。

char可以取 256 个不同的值,对应于 ISO 拉丁表中的条目。另一方面,宽字符可以接受超过 65536 个与 Unicode 值相对应的值。这是一个最近的国际标准,它允许对几乎所有语言和常用符号的字符进行编码。

于 2018-01-04T06:39:29.627 回答
4

wchar_t数据类型用于显示wide characters that will occupy 16 bits. 此数据类型占用“2 或 4”字节。

wchar_t当使用像日语这样的国际语言时,通常会使用数据类型。

于 2012-11-22T10:00:14.430 回答
4

我知道他们中的大多数人都回答了这个问题,但是当我也在学习 C++ 基础知识并开始了解wchar_t时,我想告诉你我在搜索后了解的内容。

  1. wchar_t当您需要存储超过 ASCII 255 的字符时使用,因为这些字符的大小比我们的字符类型 'char' 大。因此,需要更多的内存。

    例如:

           wchar_t var = L"Привет мир\n"; // hello world in russian
    
  2. 它通常具有大于 8 位字符的大小。

  3. Windows 操作系统大量使用它。

  4. 它通常在涉及外语时使用。

于 2020-10-25T15:54:49.777 回答
2

wchar_t 类型用于扩展字符集的字符。它是与 wstring 一起使用的其他用途之一,它是一个可以包含扩展字符集的单个字符的字符串,而不是可以包含大小为 char 的单个字符的字符串,或者使用多个字符来表示单个符号(如 utf8 )。

wchar_t 大小取决于语言环境,按照标准,它可以表示语言环境支持的最大扩展字符集的所有成员。

于 2012-11-22T09:55:47.493 回答
0

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 支持组合字符和字素(由代码点序列表示的字符)。

于 2020-09-24T21:02:00.500 回答