2011-08-24 5 views
1

Je souhaite convertir une partie de QUrl en Unicode. J'ai un URL donné, www.ÄSDF.de et je veux le convertir en www.%C4SDF.de. Comment puis-je faire ça en Qt? Quand j'utilise la méthode QUrl::toEncoded(), j'obtiens toujours l'URL convertie en UTF-8 hex: "www.% C3% 83% C2% 84SDF.de".Convertir QString ou QUrl en Unicode

+0

Avec - qurl :: toPercentEncoding (QString :: fromUtf8 ("www.ÄSDF.de")); - Je reçois maintenant le bon code utf-8 "www.% C3% 84SDF.de", mais comment puis-je convertir cette URL en unicode "www.% C4SDF.de"? – Garrz

Répondre

4

Vous ne pouvez pas générer www.%C4SDF.de avec QUrl::toPercentEncoding car cette fonction est toujours codée en séquences d'octets UTF-8 avant le codage en%.

Si vous devez vraiment utiliser un non-encodage UTF-8 comme ISO-8859-1 (généralement pour la compatibilité avec les applications existantes malheureuses), vous devrez utiliser QByteArray::toPercentEncoding sur un tableau d'octets que vous générez à partir QString::toLatin1.

Cependant, vous ne voulez probablement pas faire cela non plus. Même l'UTF-8-correct www.%C3%84SDF.de n'est pas un moyen valide de spécifier le nom d'hôte www.ÄSDF.de dans un URI. Au lieu de cela, il doit être codé en utilisant le IDN algorithm (en utilisant Punycode), donnant www.xn--sdf-pla.de.

Le moyen le plus facile et le plus pratique de procéder serait QUrl::toEncoded. Cela transforme un IRI, par exemple:

http://www.äsdf.de/äsdf?äsdf=äsdf 

dans un URI de travail:

http://www.xn--sdf-pla.de/%C3%A4sdf?%C3%A4sdf 

(note à nouveau IRI nécessite UTF-8.)

0

toEncodedUrl a été dépréciée dans QT5.
Je l'ai fait:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));