как получить строку QUrl с пробелом в ней?

QUrl url("bword://blood transfusion");
QString res = url.toString();

Почему я получил строку "bword:" вместо "bword://переливание крови"?

Как я могу получить строку «bword://переливание крови» из QUrl?


person simpzan    schedule 13.09.2010    source источник
comment
проверьте, является ли url.isValid() истинным или ложным. И попробуй без пробела.   -  person Frank Osterfeld    schedule 13.09.2010


Ответы (1)


Синтаксис URL может быть довольно сложным, см. эту статью Википедии. Проблема в том, что ваш URL не содержит поля authority, в нем есть только поле scheme "bword" и путь "//переливание крови". И в соответствии с RFC3986 - Единый идентификатор ресурса (URI): общий синтаксис:

Если полномочия отсутствуют, путь не может начинаться с двух символов косой черты ("//").

Таким образом, ваш URL-адрес недействителен (хотя isValid() возвращает true). Измените свой код на:

QUrl url("bword:/blood transfusion");
QString res = url.toString();
person Community    schedule 13.09.2010
comment
bword:blood transfusion тоже подойдет (при условии, что система работает с URN). - person Donal Fellows; 13.09.2010
comment
действительно, http:/foo bar работает, как и foobar . Ошибка в QUrl, по-видимому, заключается в том, что он частично анализирует URL-адреса - IMO он должен просто создать полностью пустой, недопустимый объект (QUrl::isValid() == false) при сбое синтаксического анализа. - person Frank Osterfeld; 13.09.2010
comment
Спасибо за ваше решение. URL-адрес, который я получил, взят из файла данных из файла словаря stardict. возможно, я могу только восстановить словарь, чтобы изменить URL-адрес. - person simpzan; 15.09.2010