我想將QUrl的一部分轉換爲Unicode。將QString或QUrl轉換爲Unicode
我有一個給定的URL,www.ÄSDF.de
,並且想將它轉換爲www.%C4SDF.de
。我如何在Qt中做到這一點?
當我使用方法QUrl::toEncoded()
時,我總是以UTF-8十六進制格式獲得轉換的URL:「www。%C3%83%C2%84SDF.de」。
我想將QUrl的一部分轉換爲Unicode。將QString或QUrl轉換爲Unicode
我有一個給定的URL,www.ÄSDF.de
,並且想將它轉換爲www.%C4SDF.de
。我如何在Qt中做到這一點?
當我使用方法QUrl::toEncoded()
時,我總是以UTF-8十六進制格式獲得轉換的URL:「www。%C3%83%C2%84SDF.de」。
您無法生成www.%C4SDF.de
和QUrl::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)。
toEncodedUrl已QT5棄用。
我這樣做:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));
隨着 - QUrl :: toPercentEncoding(QString的:: fromUtf8( 「www.ÄSDF.de」)); - 我現在得到正確的utf-8代碼「www。%C3%84SDF.de」,但是我怎樣才能轉換這個URL在unicode「www。%C4SDF.de」? – Garrz