【问题标题】:C++ Convert wstring to UnicodeC++ 将 wstring 转换为 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 页面时,它显示垃圾数据,例如随机数和大写字母。

【问题讨论】:

标签: c++ string rest unicode


【解决方案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::id" (__imp?id@?$codecvt@_UDU_Mbstatet@@@std@@2V0locale@2@A)
    • 是的,应该有 wchar_t 而不是 char32_t。已编辑。
    猜你喜欢
    • 2012-12-12
    • 2014-08-01
    • 1970-01-01
    • 2017-12-12
    • 2015-10-19
    • 2013-02-02
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多