为什么STL不“正式”支持std::string到std::wstring的转换?
我知道,std::string并且std::wstring来自相同的基本类型std::basic_string<>。但是没有一种“官方”的方法可以将std::string数据转换为std::wstring使用 C++ STL?我的意思是 Windows 提供MultiByteToWideChar()转换,但为什么 STL 不能提供转换?
我std::codecvt以前用来完成它,但现在它说它已被弃用。为什么 STL 首先删除这个支持?
提前致谢。
回答
的字符编码的std::string不是由C ++标准所定义的,std::string可以认为,可使用1个字节表示的任何编码char的元素,其包括UTF-7/8,ISO-8859-X,WINDOWS-125X等
此外, 的大小wchar_t是实现定义的,而不是由标准定义的,因此即使是 的编码也std::wstring可能有所不同。在 Windows 上,wchar_t为 2 个字节,因此std::wstring使用 UCS-2/UTF-16 编码。而在其他平台上,wchar_t是 4 个字节,因此std::wstring使用 UCS-4/UTF-32。
因此,没有单一的转换可以满足std::string <-> std::wstring所有平台和用例中所有可能的转换组合。因此,您需要知道源字符串的编码以及目标字符串的预期编码,以便执行转换。
是的,C++ 标准确实为此任务提供了std::codecvt和std::wstring_convert/ std::wbuffer_convert,但正如您所指出的,它们已被弃用。没有提供标准的替代品(还没有?)。
因此,您最好使用第 3 方 Unicode API/库来处理字符转换。
THE END
二维码