2017-04-22 79 views
1

我无法找到任何解决方案,我的问题与UTF8字符内编码的网址,而在Visual Studio中。C++网址解码,utf8字符错误

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

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

在任何网络编码器和解码器的PHP函数上述编码字符串会给你正确的解码字符串,但在C++中Visual Studio中的任何尝试我与解码网址制作代码失败。

我使用Unicode字符集在我的项目,我检索该编码的网址为:(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); 
} 

任何人都可以给我一个很好的方法或解决方案,使URLdecoding功能,即使在UTF8字符里面也能正常工作吗? 在std:string EncURL无关紧要之后使用任何类型或任何方式,我只需要在C++中为我接收的字符串提供正确的urldecoder。

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

,我需要转换的原因是为了在C中的网址打开或打开文件路径(文件夹或文件)明显++,但编码的URL字符串即将到来的(数据库,网页,聊天,文件等等) 所以我需要在utf8中解码它,因为我需要纠正非拉丁语部分的多语言目的,然后使用解码后的utf8字符串原因是需要的。

此更新可能有助于不转换它只是为wcout或cout,但它的目标puprose,我真的需要,并没有任何工作,因为它应该。

预先感谢您

+0

你如何检查UTF-8解码的字符串? Windows本身就是UTF-16,你必须在输出之前将其转换为UTF-16(或者甚至在调试器中查看它)。如果您不转换它们,UTF-8字符串将显示为MBCS。 –

+0

解码是问题还是你使用'utf8'的地方不是? – Galik

+0

你怎么知道它失败?你做了什么测试?你可以发布*代码吗? – Galik

回答

0

我会回答我的问题,因为我找到了解决办法和其他人正在使用的std :: string,并希望有UTF8字符正确,也可能派上用场。

解决方案是将编码后的url std :: string转换为std :: wstring,然后使用任何URLdecoder来解码wstring。 解码的wstring始终是正确的,如在php在线url编码和解码。 所以你可以使用解码的wstring,只要你喜欢。

,即使在Windows控制台应用程序的输出,你可以使用 Messabox看到正确的输出与wstring的