为什么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::codecvtstd::wstring_convert/ std::wbuffer_convert,但正如您所指出的,它们已被弃用。没有提供标准的替代品(还没有?)。

因此,您最好使用第 3 方 Unicode API/库来处理字符转换。


以上是为什么STL不“正式”支持std::string到std::wstring的转换?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>