2017-04-22 8 views
1

C++ Visual Studio에서 인코딩 된 URL 내 utf8 문자로 인해 발생하는 문제를 해결할 수 없습니다.UTF8 문자로 된 C++ URL 디코드 오류

내가 인코딩 된 문자열이 URL을 가지고 : 위의 인코딩 된 문자열이 당신에게 디코딩 된 올바른 문자열을 줄 것이다 PHP는 기능을하지만, C에서 + + 비주얼 스튜디오 모든 온라인 인코더 및 디코더에

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

어떤 내가 디코딩 URL로 만든 시도 코드가 실패했습니다.

나는 내 프로젝트에 위치한 유니 코드 문자를 사용하고 난으로이 인코딩 된 URL 검색 : (내가 그것을받을 방법을 변경하지 못할 PS -이 인코딩 된 URL의 표준입니다 : 문자열)

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 이후에 사용됩니다. 단지 i가 수신하는 문자열에 대해 C++에서 제대로 urldecoder가 있어야합니다.

---------- 업데이트

내가 변환해야하는 이유는 C 내에서 URL 열거 나 파일 경로 개방 (폴더 또는 파일)에 대한 명백하다 ++하지만 인코딩 된 URL 문자열로오고있다 (데이터베이스, 웹, 채팅, 파일 등) 그래서 다국어 목적을 위해 그 비 라틴어 부분을 수정해야하고 utf8 디코딩 된 문자열을 사용하기 때문에 utf8에서 디코드해야합니다. 그 이유가 필요하기 때문입니다.

이 업데이트는 wcout이나 cout 대신 변환하는 것이 도움이 될 수 있지만 필자가 실제로 필요로하는 대상 푸에스로는 효과적 일 수 있습니다.

사전

+0

을 wstring을 사용하여 올바른 출력을 볼 수 Messabox를 사용할 수 있습니까? Windows는 기본적으로 UTF-16이며 출력하기 전에 변환해야합니다 (또는 디버거에서 보더라도). UTF-8 문자열은 변환하지 않으면 MBCS로 표시됩니다. –

+0

문제가되는 디코딩입니까, 예상치 못한 곳에서'utf8'를 사용하고 있습니까? – Galik

+0

어떻게 실패했는지 알고 계십니까? 무슨 시험 했니? 코드를 게시 할 수 있습니까? – Galik

답변

0

내가 해결책을 발견하고 누군가를 위해 다른 표준 : : 문자열을 사용하여 편리하게 사용할 수 있습니다 올바른 UTF8 문자를 갖고 싶어하기 때문에 나는 내 질문에 대답 할 것이다 당신을 감사드립니다.

해결 방법은 인코딩 된 URL std :: string을 std :: wstring으로 변환 한 다음 URL 디코더를 사용하여 wstring을 디코딩하는 것입니다. 디코딩 된 wstring은 php online url encode와 decode처럼 항상 정확합니다. 디코딩 된 wstring을 원하는대로 사용할 수 있습니다.

심지어 윈도우 콘솔 응용 프로그램의 출력을 위해 당신은 어떻게 당신이 UTF-8 문자열을 디코딩을 확인하는