将QString或QUrl转换为Unicode

时间:2011-08-24 08:00:55

标签: qt unicode utf-8 qstring qurl

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

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

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

2 个答案:

答案 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, "/:")));