Конвертировать QString или QUrl в Unicode - PullRequest
1 голос
/ 24 августа 2011

Я хочу преобразовать часть QUrl в Unicode.

У меня есть заданный URL, www.ÄSDF.de, и я хочу преобразовать его в www.%C4SDF.de.Как я могу сделать это в Qt?

Когда я использую метод QUrl::toEncoded(), я всегда получаю преобразованный URL в шестнадцатеричном формате UTF-8: "www.% C3% 83% C2% 84SDF.de".

Ответы [ 2 ]

4 голосов
/ 24 августа 2011

Вы не можете сгенерировать www.%C4SDF.de с помощью QUrl::toPercentEncoding, так как эта функция всегда кодирует в байтовые последовательности UTF-8 перед кодированием%.

Если вам действительно нужно использовать кодировку не-UTF-8, такую ​​как ISO-8859-1 (обычно для совместимости с неудачными устаревшими приложениями), вам придется использовать QByteArray::toPercentEncoding в байтовом массиве, который вы генерировать из QString::toLatin1.

Однако вы, вероятно, тоже не хотите этого делать. Даже UTF-8-правильный www.%C3%84SDF.de не является допустимым способом указания имени хоста www.ÄSDF.de в URI. Вместо этого он должен быть закодирован с использованием алгоритма 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.)

0 голосов
/ 03 октября 2014

toEncodedUrl устарел в QT5.
Я сделал это:
url.setUrl(QString(QUrl::toPercentEncoding(s, "/:")));

...