簡體   English   中英

將 std::string 轉換為 std::wstring ,反之亦然

[英]Convert std::string to std::wstring and vise versa

我已經閱讀了很多關於如何在std::stringstd::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::stringstd::wstring本身之間進行轉換,而是在問如何在不同的編碼之間進行轉換。 事實是,C++ 根本不支持本機。 C++11 試圖用std::codecvtstd::wstring_convert解決這個問題,但它們是有限的,正如你所指出的,它已經在 C++17 中被棄用,沒有替代品。

因此,您最好的選擇是使用 3rd 方跨平台庫,例如 ICU、ICONV 等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM