C++ 将字符串转换为wstring[不带区域设置的俄语符号::全局]

C++ 将字符串转换为wstring[不带区域设置的俄语符号::全局],c++,string,unicode,utf-8,wstring,C++,String,Unicode,Utf 8,Wstring,是否可以在不使用std::locale::global(std::locale(“”)的情况下将字符串转换为wstring(假设字符串仅包含俄语符号,系统编码为utf-8);? 我需要C++98的解决方案 一些代码: string s = "Николай"; wstring ws; StrToWstr(ws, s); printf("str: %ls\n", ws.c_str()); 输出为空。 但是,当我加上 std::locale::global(std::locale(“”) 它会把我

是否可以在不使用std::locale::global(std::locale(“”)的情况下将字符串转换为wstring(假设字符串仅包含俄语符号,系统编码为utf-8);? 我需要C++98的解决方案

一些代码:

string s = "Николай";
wstring ws;
StrToWstr(ws, s);
printf("str: %ls\n", ws.c_str());
输出为空。 但是,当我加上

std::locale::global(std::locale(“”)

它会把我打印出来

 "Николай" (correct output).
StrToWstr方法:

size_t StrToWstr(wstring& aDst, const string& aSrc)
{
    size_t length;
    length = mbstowcs(NULL, aSrc.c_str(), 0);
    if (length != static_cast<size_t>(-1)) {
        wchar_t *buffer = new wchar_t[length + 1];
        length = mbstowcs(buffer, aSrc.c_str(), length);
        buffer[length] = L'\0';
        aDst.assign(buffer);
        delete[] buffer;
    }
    return length;
}
size\u t StrToWstr(wstring&aDst、const string&aSrc)
{
尺寸与长度;
length=mbstowcs(NULL,aSrc.c_str(),0);
如果(长度!=静态施法(-1)){
wchar_t*buffer=新的wchar_t[长度+1];
长度=mbstowcs(缓冲区,aSrc.c_str(),长度);
缓冲区[长度]=L'\0';
分配(缓冲区);
删除[]缓冲区;
}
返回长度;
}
调试表明,ws包含以下内容:

    Name : ws
        Details:{static npos = <optimized out>,
 _M_dataplus = {<std::allocator<wchar_t>> =
 {<__gnu_cxx::new_allocator<wchar_t>> = {<No data fields>},
<No data fields>}, _M_p = 0xb7fbda7c L""}}
Name:ws
详细信息:{static npos=,
_M_dataplus={=
{ = {},
},_M_p=0xb7fbda7c L”“}

您希望如何对输出字符串进行编码?UTF16、UTF2或其他什么? 如果任何一种转换都可以,您可以尝试

// UTF16 conversion
std::wstring_convert<codecvt_utf8_utf16<wchar_t>> converter;
aDst = converter.from_bytes(aSrc);

// UTF2 conversion
std::wstring_convert<codecvt_utf8<wchar_t>> converter;
aDst = converter.from_bytes(aSrc);
std::wstring_convert<std::codecvt<wchar_t, char, std::mbstate_t>> converter;
aDst = converter.from_bytes(aSrc);
//UTF16转换
std::wstring_转换器;
aDst=转换器。从字节(aSrc);
//UTF2转换
std::wstring_转换器;
aDst=转换器。从字节(aSrc);
我不确定UTF8->多字节转换是否可行,但您可以试试

// UTF16 conversion
std::wstring_convert<codecvt_utf8_utf16<wchar_t>> converter;
aDst = converter.from_bytes(aSrc);

// UTF2 conversion
std::wstring_convert<codecvt_utf8<wchar_t>> converter;
aDst = converter.from_bytes(aSrc);
std::wstring_convert<std::codecvt<wchar_t, char, std::mbstate_t>> converter;
aDst = converter.from_bytes(aSrc);
std::wstring\u转换转换器;
aDst=转换器。从字节(aSrc);

您可能想查看更多信息。

输出为空,但
ws
是否包含内容?谢谢,但此解决方案适用于C++11,我使用的是C++98。(编辑问题)