C++ 将 wstring 转换为 Unicode
Posted
技术标签:
【中文标题】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以上是关于C++ 将 wstring 转换为 Unicode的主要内容,如果未能解决你的问题,请参考以下文章
C++ 使用最少的代码将字符串转换为 wstring 并返回