使用utf8字符的C ++ URL解码错误

时间:2017-04-22 22:37:31

标签: c++ unicode utf-8

在c ++ visual studio中,我无法找到编码网址中utf8字符问题的任何解决方案。

我有这个url编码的字符串:

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

在任何带有php函数的在线编码器和解码器中,上面编码的字符串将为您提供已解码的正确字符串,但在c ++ visual studio中我尝试使用解码网址代码失败。

我在我的项目中使用Unicode字符集,我将这个编码的URL检索为:( p.s.我无法改变我接收它的方式 - 它是一个编码的url std:string)

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);
}

有人会给我一个很好的方法或解决方案来制作URL解码功能,即使内部有utf8字符也能正常工作吗? 在std:string之后使用任何类型或任何方式EncURL并不重要,我只需要在c ++中为我收到的字符串提供正确的urldecoder。

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

我需要转换的原因对于c ++中的URL打开或文件路径打开(文件夹或文件)是显而易见的,但编码的URL字符串来自于在应用程序外部在C ++中编码。(数据库,Web,聊天,文件等等) 因此我需要在utf8中对其进行解码,因为我需要纠正非拉丁语部分用于多语言目的,然后根据需要使用解码的utf8字符串。

这个更新可能有助于不仅仅为wcout或cout转换它,而是为了我真正需要的目标puprose,而且它还没有正常工作。

提前谢谢

1 个答案:

答案 0 :(得分:0)

我会回答我的问题,因为我找到了解决方案,而且对于其他任何人都在使用std :: string并希望utf8字符正确可能派上用场。

解决方案是将编码的url std :: string转换为std :: wstring,然后使用任何URLdecoder解码wstring。 解码后的wstring总是正确的,就像php在线url编码和解码一样。 所以你可以随意使用解码的wstring。

即使在Windows控制台应用程序中也可以使用输出 Messabox用wstring

查看正确的输出