我一直在阅读相当多关于如何在std::string
和std::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::string
和std::wstring
之间转换,而是如何在不同的编码之间转换。事实是,c++本身根本不支持。c++ 11试图用std::codecvt
和std::wstring_convert
来解决这个问题,但它们是有限的,正如你所注意到的,它们已经在c++ 17中被弃用了,没有替代品。
所以,你最好的选择是使用第三方跨平台库,如ICU, ICONV等。