这两种字符串存储格式之间有什么区别吗?
答案 0 :(得分:14)
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
为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位。