将std::string转换为std::wstring,反之亦然



我一直在阅读相当多关于如何在std::stringstd::wstring之间转换,但我发现的所有答案都是非常古老的。我尝试使用std::codecvt转换,但它给出了一个警告,指出它已弃用,并使用Windows.h头文件使用WideCharToMultiByte()MultiByteToWideChar()。但是,我不确定我是否能让它在其他平台上运行。

是否有一种方法将std::string转换为std::wstring,反之亦然现代c++ ?

std::wstring保存wchar_t元素,wchar_t在不同平台上的大小不同(Windows上是2字节,其他地方是4字节),因此std::wstring在不同平台上使用不同的编码(Windows上是UTF-16,其他地方是UTF-32)。就像std::string可以保存不同的8位编码(UTF-8, ISO-8859-x, Windows-125x等)。

所以,你不是在问如何在std::stringstd::wstring之间转换,而是如何在不同的编码之间转换。事实是,c++本身根本不支持。c++ 11试图用std::codecvtstd::wstring_convert来解决这个问题,但它们是有限的,正如你所注意到的,它们已经在c++ 17中被弃用了,没有替代品。

所以,你最好的选择是使用第三方跨平台库,如ICU, ICONV等。

最新更新