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_tvs char)。
3) VC++ 是否支持使用 4 字节 std::wstring?
不为std::wstring自己,不。但是您可以创建自己的std::basic_stringtypedef,例如:
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::stringUTF-8 标准。 Glib::ustring只是通过使用gunichar(a typedef for guint32) 而不是更进一步char,并公开其接口以根据原始 Unicode 代码点而不是编码的代码单元进行操作。