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

时间:2010-11-22 15:46:31

标签: c++ unicode stl utf-16

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

3 个答案:

答案 0 :(得分: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为16位,wchar_t也不会将surrogate pairs转换为Unicode代码点。

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

UTF-16是以16字节元素表示的文本概念,但实际文本字符可能由一个元素组成

std :: wstring只是这些元素的集合,是一个主要关注其存储的类。

wstring中的元素,wchar_t至少为16位,但可以是32位。