是否可以将字符串转换为wstring(假设,该字符串仅包含俄语符号,系统编码为utf-8),而不使用std :: locale :: global(std :: locale("&#34) ;));? 我需要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;
}
调试显示,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""}}
答案 0 :(得分:1)
您希望如何对输出字符串进行编码? 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);
我不确定UTF8-&gt;多字节转换是否可行,但您可以尝试
std::wstring_convert<std::codecvt<wchar_t, char, std::mbstate_t>> converter;
aDst = converter.from_bytes(aSrc);
您可能需要查看http://en.cppreference.com/w/cpp/locale/codecvt以获取更多信息。