繁体   English   中英

C ++将wstring转换为Unicode

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM