将 QString 或 QUrl 转换为 Unicode
我想将 QUrl 的一部分转换为 Unicode。
我有一个给定的 URL www.ÄSDF.de
,并希望将其转换为 www.%C4SDF.de
。我怎样才能在 Qt 中做到这一点?
当我使用 QUrl::toEncoded()
方法时,我总是得到 UTF-8 十六进制格式的转换后的 URL:“www.%C3%83%C2%84SDF.de”。
I want to convert a part of QUrl to Unicode.
I have a given URL, www.ÄSDF.de
and want to convert it to www.%C4SDF.de
. How can I do that in Qt?
When I use the method QUrl::toEncoded()
I always get the converted URL in UTF-8 hex: "www.%C3%83%C2%84SDF.de".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您无法使用
QUrl::toPercentEncoding
生成www.%C4SDF.de
,因为该函数始终在 % 编码之前编码为 UTF-8 字节序列。如果您确实必须使用非 UTF-8 编码,如 ISO-8859-1(通常是为了与不幸的遗留应用程序兼容),则必须使用
QByteArray::toPercentEncoding
在从QString::toLatin1
。但是,您可能也不想这样做。即使 UTF-8 正确的
www.%C3%84SDF.de
也不是在 URI 中指定主机名www.ÄSDF.de
的有效方法。相反,它必须使用 IDN 算法(使用 Punycode)进行编码,给出www.xn --sdf-pla.de
。最简单且通常最好的方法是 QUrl::toEncoded。这会将 IRI(例如:)转换
为工作 URI:(
再次注意 IRI 需要 UTF-8。)
You can't generate
www.%C4SDF.de
withQUrl::toPercentEncoding
as that function always encodes to UTF-8 byte sequences before %-encoding.If you really must use a non-UTF-8 encoding like ISO-8859-1 (typically for compatibility with unfortunate legacy applications), you will have to use
QByteArray::toPercentEncoding
on a byte array you generate fromQString::toLatin1
.However, you probably don't want to do that either. Even the UTF-8-correct
www.%C3%84SDF.de
is not a valid way of specifying the hostnamewww.ÄSDF.de
in a URI. Instead it must be encoded using the IDN algorithm (using Punycode), givingwww.xn--sdf-pla.de
.The easy and usually best way to proceed would be QUrl::toEncoded. This turns an IRI, eg:
into a working URI:
(note again IRI requires UTF-8.)
toEncodedUrl 在 QT5 中已被弃用。
我这样做了:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));
toEncodedUrl has been deprecated in QT5.
I did this:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));