2011-08-24 122 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, "/:")));