将 QString 或 QUrl 转换为 Unicode

发布于 2024-12-01 06:34:54 字数 233 浏览 0 评论 0原文

我想将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音盲 2024-12-08 06:34:54

您无法使用 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(例如:)转换

http://www.äsdf.de/äsdf?äsdf=äsdf

为工作 URI:(

http://www.xn--sdf-pla.de/%C3%A4sdf?%C3%A4sdf

再次注意 IRI 需要 UTF-8。)

You can't generate www.%C4SDF.de with QUrl::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 from QString::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 hostname www.ÄSDF.de in a URI. Instead it must be encoded using the IDN algorithm (using Punycode), giving www.xn--sdf-pla.de.

The easy and usually best way to proceed would be QUrl::toEncoded. This turns an IRI, eg:

http://www.äsdf.de/äsdf?äsdf=äsdf

into a working URI:

http://www.xn--sdf-pla.de/%C3%A4sdf?%C3%A4sdf

(note again IRI requires UTF-8.)

笑,眼淚并存 2024-12-08 06:34:54

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

toEncodedUrl has been deprecated in QT5.
I did this:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文