這兩種字符串存儲格式有什麼不同嗎?「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 :: set和std :: vector有什麼區別?
- 2. std :: merge和std :: set_union有什麼區別?
- 3. lambda和std :: function有什麼區別?
- 4. std :: string :: c_str和std :: string :: data有什麼區別?
- 5. std :: condition_variable和std :: condition_variable_any之間有什麼區別?
- 6. std :: to_string,boost :: to_string和boost :: lexical_cast <std::string>有什麼區別?
- 7. 有什麼區別`和$(Bash中有什麼區別?
- 8. ==和===有什麼區別?
- 9. ==和===有什麼區別?
- 10. 有什麼區別? :和||
- 11. ==和===有什麼區別?
- 12. '=='和'==='有什麼區別?
- 13. `&`和`ref`有什麼區別?
- 14. 有什麼區別:。!和:r!?
- 15. | 0和~~有什麼區別?
- 16. Appender和〜有什麼區別?
- 17. C++中的空std :: shared_ptr與空std :: shared_ptr有什麼區別?
- 18. 爲什麼使用std :: thread :: hardware_concurrency()和boost :: thread :: hardware_concurrency()會有區別?
- 19. boost :: bind與地圖綁定,綁定std :: pair和std :: map :: value_type有什麼區別?
- 20. C++:std :: shared_ptr <T>和std :: shared_ptr <T const>有什麼區別?
- 21. 有什麼區別
- 22. 有什麼區別
- 23. 有什麼區別
- 24. xtype和別名有什麼區別?
- 25. 有什麼區別?
- 26. 結合std :: wstring和函數
- 27. 有什麼區別
- 28. 有什麼區別
- 29. 有什麼區別?
- 30. 有什麼區別?
這裏有一個相當不錯的答案這裏的問題:http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring/402918#402918 – 2010-11-22 15:49:34