[英]C++ Convert wstring to Unicode
我正在尝试使用其余的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页面时,它显示了垃圾数据,例如随机数和大写字母。
您的尝试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));
如果我没记错的话,您的其余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;
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.