我想把QUrl的一部分转换成Unicode。
我有一个给定的网址,www.ÄSDF.de,并希望将其转换为www.%C4SDF.de。我如何在Qt中做到这一点?
当我使用QUrl::toEncoded()方法时,我总是得到UTF8十六进制格式的转换后的网址:"www.%C3%83%C2%84SDF.de“。
发布于 2011-08-24 20:00:51
您不能使用QUrl::toPercentEncoding生成www.%C4SDF.de,因为该函数总是在%编码之前将其编码为UTF-8字节序列。
如果您确实必须使用像ISO-8859-1这样的非UTF8编码(通常是为了与不幸的遗留应用程序兼容),那么您必须对从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。)
发布于 2014-10-03 22:11:14
QT5中已弃用toEncodedUrl。
我这样做了:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));
https://stackoverflow.com/questions/7172249
复制相似问题