QUrlの一部をUnicodeに変換したい。
特定の URL がwww.ÄSDF.de
あり、それを に変換したいと考えていwww.%C4SDF.de
ます。Qtでそれを行うにはどうすればよいですか?
この方法を使用すると、QUrl::toEncoded()
常に変換された URL が UTF-8 hex: "www.%C3%83%C2%84SDF.de" で取得されます。
この関数は常に % エンコードの前に UTF-8 バイト シーケンスにエンコードするため、www.%C4SDF.de
with で生成することはできません。QUrl::toPercentEncoding
ISO-8859-1 のような非 UTF-8 エンコーディングを実際に使用する必要がある場合 (通常、残念なレガシー アプリケーションとの互換性のため)、QByteArray::toPercentEncoding
から生成したバイト配列を使用する必要がありますQString::toLatin1
。
ただし、おそらくそれもやりたくないでしょう。UTF-8 正しいものでさえ、URI でwww.%C3%84SDF.de
ホスト名を指定する有効な方法ではありません。代わりに、 IDN アルゴリズム(Punycode を使用) をwww.ÄSDF.de
使用してエンコードする必要があり、 .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 が必要であることに注意してください。)
toEncodedUrl は QT5 で廃止されました。
これは私がしました:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));