2016-11-16 105 views
0

我試圖使用REST API和功能之一有這樣一個例子:C++ wstring的轉換爲Unicode

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頁面上,它顯示垃圾數據,如隨機數字和大寫字母。

+0

'U'是宏,請參閱此處的含義:https://microsoft.github.io/cpprestsdk/basic__types_8h_source.html – marcinj

回答

0

如果我沒有記錯的REST API文檔是在此URL下:

https://microsoft.github.io/cpprestsdk/namespaceutility_1_1conversions.html

,你可以在上面看到,這個命名空間:utility::conversions,proivides各種轉換功能,這應該對你有用。例如:

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;

0

你的嘗試#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)); 
+0

1> Main.obj:錯誤LNK2001:無法解析的外部符號「__declspec(dllimport)public :static class std :: locale :: id std :: codecvt :: id「(__imp_?id @?$ codecvt @ _UDU_Mbstatet @@@ std @@ 2V0locale @ 2 @ A) – mocode9

+0

是,應該有wchar_t而不是char32_t。編輯。 – leftjab