我想将 QUrl 的一部分转换为 Unicode。
我有一个给定的 URL,www.ÄSDF.de
并希望将其转换为www.%C4SDF.de
. 我怎么能在 Qt 中做到这一点?
当我使用该方法时,QUrl::toEncoded()
我总是以 UTF-8 十六进制获得转换后的 URL:“www.%C3%83%C2%84SDF.de”。
您无法生成www.%C4SDF.de
with,QUrl::toPercentEncoding
因为该函数始终在 %-encoding 之前编码为 UTF-8 字节序列。
如果你真的必须使用像 ISO-8859-1 这样的非 UTF-8 编码(通常是为了与不幸的遗留应用程序兼容),你将不得不使用QByteArray::toPercentEncoding
从QString::toLatin1
.
但是,您可能也不想这样做。即使是正确的 UTF-8www.%C3%84SDF.de
也不是www.ÄSDF.de
在 URI 中指定主机名的有效方式。相反,它必须使用IDN 算法(使用 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, "/:")));