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