1

我想将 QUrl 的一部分转换为 Unicode。

我有一个给定的 URL,www.ÄSDF.de并希望将其转换为www.%C4SDF.de. 我怎么能在 Qt 中做到这一点?

当我使用该方法时,QUrl::toEncoded()我总是以 UTF-8 十六进制获得转换后的 URL:“www.%C3%83%C2%84SDF.de”。

4

2 回答 2

4

您无法生成www.%C4SDF.dewith,QUrl::toPercentEncoding因为该函数始终在 %-encoding 之前编码为 UTF-8 字节序列。

如果你真的必须使用像 ISO-8859-1 这样的非 UTF-8 编码(通常是为了与不幸的遗留应用程序兼容),你将不得不使用QByteArray::toPercentEncodingQString::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。)

于 2011-08-24T12:00:50.730 回答
0

toEncodedUrl 在 QT5 中已被弃用。
我这样做了:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));

于 2014-10-03T14:11:14.257 回答