2017-04-22 206 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的