我想将QUrl的一部分转换为Unicode。
我有一个指定的网址www.ÄSDF.de
,并希望将其转换为www.%C4SDF.de
。我怎么能在Qt中做到这一点?
当我使用方法QUrl::toEncoded()
时,我总是以UTF-8十六进制获得转换后的URL:“www。%C3%83%C2%84SDF.de”。
答案 0 :(得分:4)
您无法使用www.%C4SDF.de
生成QUrl::toPercentEncoding
,因为该函数始终在%-encoding之前编码为UTF-8字节序列。
如果你真的必须使用像ISO-8859-1这样的非UTF-8编码(通常是为了与不幸的遗留应用程序兼容),你必须在从{{{{}}生成的字节数组上使用QByteArray::toPercentEncoding
。 3}}
但是,您可能也不想这样做。即使UTF-8更正www.%C3%84SDF.de
也不是在URI中指定主机名www.ÄSDF.de
的有效方法。相反,它必须使用QString::toLatin1
(使用Punycode)进行编码,并提供www.xn--sdf-pla.de
。
简单且通常最好的方法是IDN algorithm。这会变成IRI,例如:
http://www.äsdf.de/äsdf?äsdf=äsdf
进入工作URI:
http://www.xn--sdf-pla.de/%C3%A4sdf?%C3%A4sdf
(再次注意IRI需要UTF-8。)
答案 1 :(得分:0)
toEncodedUrl已在QT5中弃用。
我这样做了:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));