2016-11-16 16 views
0

にwstringの変換:C++私は、残りのAPIを使用しようとしていると、機能の一つは、このように例を持っていたUnicode

uri_builder builder(U("/test.php")); 
builder.append_query(U("worker"), U("hello")); 

私が代わりに文字列リテラルの変数を使用したいです。 今のところ私は使用したいstd :: wstring変数を持っていますが、U(符号なし)接頭辞を使ってそれをどのように使用するのか分かりません。

提案がありますか?

私はまた

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert; 
    std::string uWorkerName = convert.to_bytes(the_name); 

私の最新の失敗した試みを試みた

std::wstring name = L"the_name"; 
builder.append_query(U("worker"), U(the_name.c_str())); 

を試してみた

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あなたに役立つ。例:あなたはあなたの名前がwchar_tの文字で構成されるようにしたい場合は

std::string name = "the_name"; 
builder.append_query(U("worker"), utility::conversions::to_string_t(name)); 

、その後、名前空間上utf16string引数にオーバーロードも含まれています。このサイトから:

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

あなたはutf16stringは常に2バイト文字の文字列であることを試みることを学ぶことができます。ウィンドウの下ではtypedef std::wstring utf16string;、Linuxの場合は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

はいchar32_tではなくwchar_tが必要です。編集されました。 – leftjab

関連する問題