2010-11-22 118 views

回答

14

std::wstringwchar_t的容器。没有指定wchar_t的大小-Windows编译器倾向于使用16位类型,Unix编译器是32位类型。

UTF-16是以16位整数序列编码Unicode码点序列的一种方法。

如果使用Visual Studio,如果使用不包含BMP以外的字符的宽字符文字(例如L"Hello World"),则最终将以UTF-16结尾,但大多这两个概念是无关的。如果您使用BMP以外的字符,则std::wstring不会将surrogate pairs转换为Unicode代码点,即使wchar_t为16位。

2

UTF-16是在16字节的元素表示的文本的概念,但实际的文本字符可以由一个比元件

的std :: wstring的只是这些元素的集合,并且是一类主要关心他们的存储。

wstring中的元素wchar_t至少为16位,但可以为32位。

+0

你可以请更详细地解释,就像举个例子。例如,字符'A'存储在std :: wstring中,如“0x0041”。它如何以UTF-16格式存储? – hkBattousai 2010-11-22 15:50:21

+7

16 - **字节** ??哇,这是一个硬核字符编码 – Inverse 2010-11-22 15:51:27

+2

@反向:这就是为什么每个人都应该只使用ASCII,不会有太多的内存使用的悲伤;) – 2010-11-22 16:36:45

6

UTF-16是一种特定的Unicode编码。 std::wstring是一个字符串实现,它使用wchar_t作为其基础类型来存储每个字符。 (相反,通常std::string使用char)。

wchar_t一起使用的编码不一定必须是UTF-16,例如它也可以是UTF-32。