2017-04-22 16 views
1

C++のVisual StudioでエンコードされたURLの中にutf8文字で問題が発生しても解決できません。UTF8文字でエラーが発生したC++ URLデコードエラー

私はこのURLエンコードされた文字列を持っている:上記エンコードされた文字列はあなたにデコードされた正しい文字列を与えるPHPの関数で任意のオンラインエンコーダとデコーダで

//Encoded 
%5C%CE%A4%CE%B5%CF%83%CF%84%5C 
//Decoded 
\Τεστ\ 

をしかし、C++ Visual Studioで任意のiは、復号URLで作ってみてくださいコードが失敗しました。

私は私のプロジェクトで設定したUnicode文字を使用して、私は、このエンコードされたURL取得:(私はそれを受け取る方法を変更傾けるPS - エンコードされたURLのSTDです:文字列)

std:string EncURL = "%5C%CE%A4%CE%B5%CF%83%CF%84%5C"; 

私は、しようとしインターネットからの多くのデコード機能を使用して読みやすくして使用しますが、正しいものではなく常に私に漢字を返します。 以下は私が試した多くの機能のうち、エンコードされたURLにutf8文字がない場合にのみ機能します。

string url_decode(string src){ 
    string ret; 
    char ch; 
    int i,ii; 
    for(i=0; i<src.length(); i++){ 
    if(int(src[i]) == 37){ 
     sscanf(src.substr(i+1,2).c_str(), "%x", &ii); 
     ch = static_cast<char>(ii); 
     ret += ch; 
     i = i+2; 
    }else{ 
     ret += src[i]; 
    } 
    } 
    return (ret); 
} 

誰も私にも、内部のutf8文字で正しく動作しますURLdecoding機能を作る良い方法や解決策を与えるのだろうか? std:string EncURLの後には、あらゆるタイプまたは方法が使用されますが、私は受け取った文字列のためにC++で適切なurldecoderを持つ必要があります。

----------更新

私は変換する必要がある理由は、Cの中からURLを開くまたはファイルパスの開口部(フォルダまたはファイル)のために明らかである++が、エンコードされたURL文字列のように来ています(データベース、Web、チャット、ファイルなど) 私は多言語の目的のためにその非ラテン語の部分を修正し、次にデコードされたutf8文字列を使用する必要があるので、utf8でそれをデコードする必要がありますその理由が必要です。

このアップデートは、wcoutやcoutだけではなく、私が本当に必要としている目標の子豚のために変換するのに役立ちます。

は事前

+0

をwstringので正しい出力を見ることが Messaboxを使用することができますか? WindowsはネイティブにUTF-16で、出力する前に変換する必要があります(またはデバッガで見ても)。 UTF-8文字列を変換しないと、MBCSとして表示されます。 –

+0

それは問題であるか、期待されていないところで 'utf8'を使っていますか? – Galik

+0

それはどのように失敗したのですか?どのようなテストをしましたか?あなたは*コードを投稿できますか? – Galik

答えて

0

私は解決策を見つけたし、誰のために他のstd ::文字列を使用して便利になることが正しいutf8の文字を持つようにしたいされているので、私は私の質問に答えるにありがとう。

解決方法は、エンコードされたURLのstd :: stringをstd :: wstringに変換してから、任意のURLデコーダを使用してwstringをデコードすることです。 デコードされたwstringはphp online url encodeとdecodeのように常に正しいです。 デコードされたwstringは好きなように使用できます。出力の場合

も、Windowsコンソールアプリケーションで、あなたはどのようにUTF-8デコードされた文字列をチェックしている

関連する問題