我想将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