[英]Convert std::string to std::wstring and vise versa
我已經閱讀了很多關於如何在std::string
和std::wstring
之間進行轉換的內容,但是我找到的所有答案都非常古老。 我嘗試使用std::codecvt
進行轉換,但它給出了一個警告,指出它已被棄用,並使用Windows.h
header 文件使用WideCharToMultiByte()
和MultiByteToWideChar()
。 但是,我不確定是否可以使其在其他平台上運行。
有沒有辦法在現代C++ 中將std::string
轉換為std::wstring
,反之亦然?
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 中被棄用,沒有替代品。
因此,您最好的選擇是使用 3rd 方跨平台庫,例如 ICU、ICONV 等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.