轉換為 stdwstring
在 C++中,字元序列通過使用本機字元型別專門化 std::basic_string
類來表示。標準庫定義的兩個主要集合是 std::string
和 std::wstring
:
-
std::string
採用char
型別的元素構建 -
std::wstring
採用wchar_t
型別的元素構建
要在兩種型別之間進行轉換,請使用 wstring_convert
:
#include <string>
#include <codecvt>
#include <locale>
std::string input_str = "this is a -string-, which is a sequence based on the -char- type.";
std::wstring input_wstr = L"this is a -wide- string, which is based on the -wchar_t- type.";
// conversion
std::wstring str_turned_to_wstr = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(input_str);
std::string wstr_turned_to_str = std::wstring_convert<std::codecvt_utf8<wchar_t>>().to_bytes(input_wstr);
為了提高可用性和/或可讀性,你可以定義執行轉換的函式:
#include <string>
#include <codecvt>
#include <locale>
using convert_t = std::codecvt_utf8<wchar_t>;
std::wstring_convert<convert_t, wchar_t> strconverter;
std::string to_string(std::wstring wstr)
{
return strconverter.to_bytes(wstr);
}
std::wstring to_wstring(std::string str)
{
return strconverter.from_bytes(str);
}
樣品用法:
std::wstring a_wide_string = to_wstring("Hello World!");
這肯定比 std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes("Hello World!")
更具可讀性。
請注意,char
和 wchar_t
並不意味著編碼,並且沒有給出大小的位元組數。例如,wchar_t
通常實現為 2 位元組資料型別,通常包含 Windows 下的 UTF-16 編碼資料(或 Windows 2000 之前版本中的 UCS-2)和使用 UTF-32 編碼的 4 位元組資料型別 Linux 作業系統。這與較新的型別 char16_t
和 char32_t
形成對比,後者在 C++ 11 中引入並且保證足夠大以分別儲存任何 UTF16 或 UTF32字元(或更確切地說,程式碼點 )。