C++;用utf8字符解码URL错误 在C++ VisualStudio./P>中,我找不到任何解决我在编码URL中的UTF8字符的方法。

C++;用utf8字符解码URL错误 在C++ VisualStudio./P>中,我找不到任何解决我在编码URL中的UTF8字符的方法。,c++,unicode,utf-8,C++,Unicode,Utf 8,我有这个url编码字符串: //Encoded %5C%CE%A4%CE%B5%CF%83%CF%84%5C //Decoded \Τεστ\ 在任何具有PHP功能的在线编码器和解码器中,上面编码的字符串将给您解码正确的字符串,但是在C++ Visual Studio中,我对解码URL代码的任何尝试都失败了。 我在我的项目中使用Unicode字符集,我检索这个编码的url为:(注意,我不能改变接收它的方式-它是一个编码的url std:string) 然后,我尝试了许多来自互联网的解码功能,使

我有这个url编码字符串:

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

在任何具有PHP功能的在线编码器和解码器中,上面编码的字符串将给您解码正确的字符串,但是在C++ Visual Studio中,我对解码URL代码的任何尝试都失败了。 我在我的项目中使用Unicode字符集,我检索这个编码的url为:(注意,我不能改变接收它的方式-它是一个编码的url std:string)

然后,我尝试了许多来自互联网的解码功能,使其可读性和使用它,但它总是返回我的中文字符,而不是正确的。 下面是我尝试过的许多函数中的一个,它只有在编码的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);
}
stringurl\u解码(stringsrc){
字符串ret;
char ch;
int i、ii;

对于(i=0;i我将回答我的问题,因为我找到了解决方案,对于其他任何使用std::string并希望utf8字符正确的人来说,这可能会派上用场

解决方案是将编码的url std::string转换为std::wstring,然后使用任何url解码器对wstring进行解码。 解码的wstring总是正确的,就像php在线url编码和解码一样。 因此,您可以根据需要使用解码的wstring

对于输出,即使在windows控制台应用程序中也可以使用
Messabox要使用wstring查看正确的输出

您如何检查UTF-8解码字符串?Windows本机为UTF-16,您必须在输出它之前转换为UTF-16(甚至在调试器中查看它).UTF-8字符串如果不进行转换,将显示为MBC。问题出在解码过程中,还是您使用了
utf8
而不是预期的?您怎么知道它失败了?您做了什么测试?您能发布该代码吗?我只得到一个编码的url字符串(该字符串在任何其他解码的地方都能提供正确的输出)在MVS中没有。当输出考虑一个简单的CUT时,你应该尝试:<代码> STD:String EncURL= U8…..,当你说任何URL解码器时我都不理解。你可以发布你的代码吗?
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);
}