1)我在 Linux 上读过,std::wstring 是 4 字节,而在 Windows 上,它是 2 字节。这是否意味着 Linux 内部支持是 UTF-32 而 Windows 是 UTF-16?
实际上wchar_t
,std::wstring
在 Linux 上是 4 个字节,在 Windows 上是 2 个字节。 std::wstring
是 的 typedef std::basic_string<wchar_t>
,因此std::wstring
在 Linux 上支持 UTF-32,在 Windows 上支持 UTF-16,是的。
2) std::wstring 的使用是否与 std::string 接口非常相似?
std::wstring
和都是std::string
的类型定义std:basic_string
,因此它们具有相同的接口,只是value_type
类型不同(分别为wchar_t
vs char
)。
3) VC++ 是否支持使用 4 字节 std::wstring?
不为std::wstring
自己,不。但是您可以创建自己的std::basic_string
typedef,例如:
typedef std::basic_string<int32_t> u32string;
事实上,这正是新的 C++11std::u16string
和std::u32string
类型的定义方式:
typedef std::basic_string<char16_t> u16string;
typedef std::basic_string<char32_t> u32string;
std::basic_string
制作for的 typedef 也并非闻所未闻TCHAR
:
typedef std::basic_string<TCHAR> tstring;
作为旁注,我遇到了一个使用 UTF-8 的字符串库,它具有与 std::string 非常相似的接口,它提供了熟悉的功能,例如长度、substr、查找、大写/小写转换等。该库是 Glib ::ustring。
从技术上讲,您可以(很多人也这样做)使用std::string
UTF-8 标准。 Glib::ustring
只是通过使用gunichar
(a typedef for guint32
) 而不是更进一步char
,并公开其接口以根据原始 Unicode 代码点而不是编码的代码单元进行操作。