如何将string转换成wstring C++
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将string转换成wstring C++相关的知识,希望对你有一定的参考价值。
参考技术A std::wstring StringToWString(const std::string& s)std::wstring wszStr;
int nLength = MultiByteToWideChar( CP_ACP, 0, s.c_str(), -1, NULL, NULL );
wszStr.resize(nLength);
LPWSTR lpwszStr = new wchar_t[nLength];
MultiByteToWideChar( CP_ACP, 0, s.c_str(), -1, lpwszStr, nLength );
wszStr = lpwszStr;
delete [] lpwszStr;
return wszStr;
参考技术B 下个软件就好了
C++ 将 wstring 转换为 Unicode
【中文标题】C++ 将 wstring 转换为 Unicode【英文标题】:C++ Convert wstring to Unicode 【发布时间】:2016-11-16 21:49:47 【问题描述】:我正在尝试使用其余 API,其中一个函数有一个这样的示例:
uri_builder builder(U("/test.php"));
builder.append_query(U("worker"), U("hello"));
我想使用变量而不是字符串文字。 现在我有一个我想使用的 std::wstring 变量,但我不知道如何将它与 U(无符号)前缀一起使用。
有什么建议吗?
我试过了
std::wstring name = L"the_name";
builder.append_query(U("worker"), U(the_name.c_str()));
我也试过
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
std::string uWorkerName = convert.to_bytes(the_name);
我最近一次失败的尝试
std::u32string uWorkerName(workerName.begin(), workerName.end());
最后一个允许我使用 API,但是当数据访问我的 php 页面时,它显示垃圾数据,例如随机数和大写字母。
【问题讨论】:
U
是一个宏,其含义见这里:microsoft.github.io/cpprestsdk/basic__types_8h_source.html
【参考方案1】:
如果我没记错的话,你的其他 api 文档在这个 url 下:
https://microsoft.github.io/cpprestsdk/namespaceutility_1_1conversions.html
正如你在上面看到的,这个命名空间:utility::conversions
,提供了各种对你有用的转换函数。示例:
std::string name = "the_name";
builder.append_query(U("worker"), utility::conversions::to_string_t(name));
如果你想让你的名字由 wchar_t 字符组成,那么上面的命名空间还包含 utf16string
参数的重载。从这个网站:
https://microsoft.github.io/cpprestsdk/basic__types_8h_source.html
您可以了解到utf16string
总是尝试成为两个字节字符的字符串。在 windows 下应该是 typedef std::wstring utf16string;
而在 linux-es 上可能是 typedef std::u16string utf16string;
。
【讨论】:
【参考方案2】:您的尝试 #3 看起来最接近。试试这个:
std::wstring name = L"the_name";
std::string utf8str;
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf8_conv;
for (auto &ch : name) utf8str.append(utf8_conv.to_bytes(ch));
【讨论】:
1>Main.obj:错误 LNK2001:无法解析的外部符号“_declspec(dllimport) public:静态类 std::locale::id std::codecvt以上是关于如何将string转换成wstring C++的主要内容,如果未能解决你的问题,请参考以下文章