【问题标题】:Convert QString or QUrl to Unicode将 QString 或 QUrl 转换为 Unicode
【发布时间】:2011-08-24 08:00:54
【问题描述】:

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

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

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

【问题讨论】:

  • 带 - QUrl::toPercentEncoding(QString::fromUtf8("www.ÄSDF.de")); - 我现在得到了正确的 utf-8 代码“www.%C3%84SDF.de”,但是如何将这个 URL 转换为 unicode“www.%C4SDF.de”?

标签: qt unicode utf-8 qstring qurl


【解决方案1】:

您不能使用QUrl::toPercentEncoding 生成www.%C4SDF.de,因为该函数总是在 %-encoding 之前编码为 UTF-8 字节序列。

如果您确实必须使用像 ISO-8859-1 这样的非 UTF-8 编码(通常是为了与不幸的遗留应用程序兼容),则必须在从 QString::toLatin1 生成的字节数组上使用 QByteArray::toPercentEncoding

但是,您可能也不想这样做。即使是 UTF-8 正确的 www.%C3%84SDF.de 也不是在 URI 中指定主机名 www.ÄSDF.de 的有效方式。相反,它必须使用IDN algorithm(使用 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。)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 2011-07-21
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 2020-04-30
      • 2015-01-17
      • 2013-09-30
      相关资源
      最近更新 更多