2010-11-22 121 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。