将wstring转换为Unicode

C++ Convert wstring to Unicode

本文关键字:Unicode 转换 wstring      更新时间:2023-10-16

我想使用剩下的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上可能是typedef std::u16string utf16string;