"UTF-16"和"std :: wstring"有什么区别?

hkB*_*sai 10 c++ unicode stl utf-16

这两种字符串存储格式有什么区别吗?

Joe*_*oeG 14

std::wstring是一个容器wchar_t.wchar_t未指定大小- Windows编译器倾向于使用16位类型,Unix编译器使用32位类型.

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

使用Visual Studio,如果你使用L"Hello World"不包含BMP之外的字符的宽字符文字(例如),你最终会得到UTF-16,但这两个概念大多不相关.如果您使用BMP之外的字符,std::wstring则不会将代理项对转换为Unicode代码点,即使wchar_t是16位.

  • 不,std :: wstring只是一个整数的容器.容器的编码完全取决于您插入容器的数据. (6认同)

Thi*_*ter 6

UTF-16是一种特定的Unicode编码.std::wstring是一个字符串实现,它使用wchar_t它作为存储每个字符的基础类型.(相比之下,常规std::string用途char).

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

  • 它也可以是UCS-2或S-JIS或Big 5或......好吧,任何东西. (2认同)