2014-01-20 5 views
1

오늘 오후부터 C++을 처음 사용하면서 어려움을 겪고 있습니다.질문에 백분율 기호를 포함 할 수 있습니까?

const QUrl command("http://192.168.11.11/subdomain/letters?t=somekeyword&p=%01") 

그러나 QUrl "명령"QNetworkAccessManager에 사용되는 전송 될 때, 그것은 실제로 전송되는 % 기호 뒤에 25를 추가 :

나는 아래 라인을 가지고있다. 이제 QUrl이 TolerantMode에 있으며 사용자 입력 오류라고 생각하여 추가하고 있습니다.

원하지 않는 결과 :

http://192.168.11.11/subdomain/letters?t=somekeyword&p=%2501 

가 어떻게 내 URL을 방지 할 수 수정해야합니까?

백분율 기호를 두 배로 늘리고 백 슬래시를 삽입하려고했습니다.

도움을 주시면 감사하겠습니다. 감사합니다. .

+0

우리는 여기에 대해 QT의 버전은 무엇을 말을하는거야? – ccozad

+0

또한 위의 URL에서 인쇄 할 수없는 문자 "SOH, heading head"를 URL 인코딩하려고합니까? 그렇지 않으면 % 01은 의미가 없습니다. – ccozad

+0

블랙 베리 SDK에서 QT를 사용하고 있는데, QT4라고 이해하고 있습니다. 또한 웹 서버로 보내진 명령입니다. % 01은 전원이 켜져 있고, % 00은 전원이 꺼져 있습니다. – Carol

답변

2

이것은 까다로운 문제로 판명되었습니다. 여기에 내가 해낸 솔루션입니다 :

코드

QByteArray rawQuery("t=somekeyword&p=%01"); 
QUrl command("http://192.168.11.11/subdomain/letters"); 
command.setEncodedQuery(rawQuery); 
std::cout << command.toEncoded().data(); 

결과이 솔루션은 어떤 행동에 의존

http://192.168.11.11/subdomain/letters?t=somekeyword&p=%01

노트

상태 : setEncodedQuery 설명 :

쿼리 할 쿼리 문자열을 설정합니다. 문자열은있는 그대로 삽입되며 toEncoded()를 호출 할 때 추가 인코딩이 수행되지 않습니다.

이 함수는 키 - 값 패턴에 맞지 않는 쿼리 문자열을 전달해야하거나 QUrl에서 제안한 것보다 특수 문자 인코딩에 다른 체계를 사용하는 경우에 유용합니다.

QByteArray() 값을 쿼리 (null QByteArray)에 전달하면 쿼리가 완전히 해제됩니다. 그러나 QByteArray ("") 값을 전달하면 원래 URL에 "?"가있는 것처럼 쿼리가 빈 값으로 설정됩니다.

참조

+1

이것은 잘 설명 된 답변 덕분에 완벽하게 작동했습니다! – Carol