2012-11-13 2 views
0

우리의 응용 프로그램은 32 비트 응용 프로그램입니다. 그것이 윈도우 7 64 비트에 설치되면 일반적으로 "C : \ Program Files (x86)"대신 "C : \ Program Files"에 설치됩니다. 우리는 설치 위치를 기반으로 URL을 만들고 웹 서비스의 일부로 전달합니다. 다음과 같이 URL을 구성합니다.괄호를 포함하는 QUrl

ppmPath = "http://" + ipAddress + ":13007/" + folder + ".ppm" + "?filePath=" 
      + applicationDirPath + "/" + FIRMWARE; 
QUrl ppmURL(ppmPath, QUrl::TolerantMode); 
ppmPath = QString(ppmURL.toEncoded()); 

가변 유형 및 의미는 일반적입니다.

Windows 7 64 비트의 "applicationDirPath"에는 "(x86)"하위 문자열에 하나의 닫는 괄호 ")"가 포함되어 있기 때문에 URL이 깨졌습니다. 다른 위치에 설치하면 위치에 다른 특수 문자가 있어도 완벽하게 작동합니다.

URL에서 ")"문자를 처리하는 방법은 깨지지 않았습니까?

답변

2

the documentation 괄호는 허용 모드에서도 QUrl에 의해 자동으로 인코딩됩니다. 처음 URL을 QString에 래핑 한 다음 ""문자를 "% 28"으로 바꾸고 모두 ) 문자를 "% 29"로 바꾼다면 예상대로 작동해야합니다.

QString ppmPath = QString("http://" + ipAddress + ":13007/" + folder + ".ppm" + "?filePath=" 
      + applicationDirPath + "/" + FIRMWARE); 
QUrl ppmURL(ppmPath, QUrl::TolerantMode); 
ppmPath = QString(ppmURL.toEncoded()); 
ppmPath.replace(QChar('('), "%%28"); 
ppmPath.replace(QChar(')'), "%%29"); 

나는 이중 %가 거기에 있어야한다고 확신하지는 않지만, 과거에 문제가 있었던 것을 기억합니다. 두 가지 방법으로 시도해보십시오.

또는 QUrl::toPercentEncoding()으로 재생하고 전체 생성자를 건너 뛸 수 있습니다. 괄호를 변환하는 것으로 보입니다.

QUrl ppmURL(QString("http://" + ipAddress + ":13007/" + folder + ".ppm"), QUrl::TolerantMode); 
QString filepath = QUrl::toPercentEncoding(applicationDirPath + "/" + FIRMWARE); 
ppmUrl.addEncodedQueryItem("filepath", filepath.toLocal8Bit()); 
ppmPath = QString(ppmURL.toEncoded()); 
관련 문제