2011-08-24 90 views
1

我想将QUrl的一部分转换为Unicode。将QString或QUrl转换为Unicode

我有一个给定的URL,www.ÄSDF.de,并且想将它转换为www.%C4SDF.de。我如何在Qt中做到这一点?

当我使用方法QUrl::toEncoded()时,我总是以UTF-8十六进制格式获得转换的URL:“www。%C3%83%C2%84SDF.de”。

+0

随着 - QUrl :: toPercentEncoding(QString的:: fromUtf8( “www.ÄSDF.de”)); - 我现在得到正确的utf-8代码“www。%C3%84SDF.de”,但是我怎样才能转换这个URL在unicode“www。%C4SDF.de”? – Garrz

回答

4

您无法生成www.%C4SDF.deQUrl::toPercentEncoding,因为该函数在%-encoding之前始终编码为UTF-8字节序列。

如果你真的必须使用非UTF-8编码,如ISO-8859-1(通常与不幸的遗产应用程序的兼容性),你将不得不从QString::toLatin1生成的字节数组上使用QByteArray::toPercentEncoding

但是,你可能不想这样做。即使UTF-8正确的www.%C3%84SDF.de也不是在URI中指定主机名www.ÄSDF.de的有效方式。相反,它必须使用IDN algorithm(使用Punycode)进行编码,并给出www.xn--sdf-pla.de

通常最好的方法是QUrl::toEncoded。这将打开一个IRI,如:

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

到正常工作的URI:

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

(注再次IRI需要UTF-8)。

0

toEncodedUrl已QT5弃用。
我这样做:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));