这两种字符串存储格式有什么不同吗?“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