這兩種字符串存儲格式有什麼不同嗎?「UTF-16」和「std :: wstring」有什麼區別?
回答
std::wstring
是wchar_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位。
UTF-16是在16字節的元素表示的文本的概念,但實際的文本字符可以由一個比元件
的std :: wstring的只是這些元素的集合,並且是一類主要關心他們的存儲。
wstring中的元素wchar_t至少爲16位,但可以爲32位。
你可以請更詳細地解釋,就像舉個例子。例如,字符'A'存儲在std :: wstring中,如「0x0041」。它如何以UTF-16格式存儲? – hkBattousai 2010-11-22 15:50:21
16 - **字節** ??哇,這是一個硬核字符編碼 – Inverse 2010-11-22 15:51:27
@反向:這就是爲什麼每個人都應該只使用ASCII,不會有太多的內存使用的悲傷;) – 2010-11-22 16:36:45
UTF-16是一種特定的Unicode編碼。 std::wstring
是一個字符串實現,它使用wchar_t
作爲其基礎類型來存儲每個字符。 (相反,通常std::string
使用char
)。
與wchar_t
一起使用的編碼不一定必須是UTF-16,例如它也可以是UTF-32。
- 1. std :: transform和std :: for_each有什麼區別?
- 2. std :: function和std :: mem_fn有什麼區別
- 3. std :: invoke和std :: function有什麼區別?
- 4. std :: set和std :: vector有什麼區別?
- 5. std :: cout和std :: wcout有什麼區別?
- 6. std :: merge和std :: set_union有什麼區別?
- 7. std :: partial_sum和std :: inclusive_scan有什麼區別?
- 8. std :: deque和boost:deque有什麼區別?
- 9. std :: move和unique_ptr :: reset有什麼區別?
- 10. lambda和std :: function有什麼區別?
- 11. std :: string :: c_str和std :: string :: data有什麼區別?
- 12. C++ std :: lock和std :: unique_lock之間有什麼區別?
- 13. std :: to_string,boost :: to_string和boost :: lexical_cast <std::string>有什麼區別?
- 14. std :: strtol和std :: stoi之間有什麼區別?
- 15. std :: condition_variable和std :: condition_variable_any之間有什麼區別?
- 16. -std = C++ 11和-std = gnu ++ 11之間有什麼區別?
- 17. 有什麼區別`和$(Bash中有什麼區別?
- 18. 有什麼區別? :和||
- 19. &&和||有什麼區別?
- 20. 「/」和「/ *」有什麼區別?
- 21. 有什麼區別:。!和:r!?
- 22. ==和===有什麼區別?
- 23. Appender和〜有什麼區別?
- 24. $ @和$ *有什麼區別?
- 25. is和=有什麼區別?
- 26. #.00和#。##有什麼區別?
- 27. `==`和`is`有什麼區別?
- 28. '=='和'==='有什麼區別?
- 29. /和/#/有什麼區別?
- 30. | 0和~~有什麼區別?
這裏有一個相當不錯的答案這裏的問題:http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring/402918#402918 – 2010-11-22 15:49:34