为什么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
二维码