Декодирование канонизированного URL
От: Fedorenkov  
Дата: 15.07.10 07:59
Оценка:
Здравствуйте!

Проблемы с декодированием URL к нормальному виду.

Пробовал:
HTTPDecode из HTTPApp.pas
UrlCanonicalizeW из ShLwApi.pas
InternetCanonicalizeUrlW из WinInet

Цель всего этого — повторить поведение IE.
Строки на которых проводил тестирование:
[1] '%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0'

[2] 'メインページ%20.html'
[3] 'メインページ%2520.html'

Строка [1] должна после преобразования иметь вид: 'Заглавная_страница' и проходить проверку IsUTF8String

Строка [2] должна превращаться в 'メインページ .html', а строка [3] соответственно в 'メインページ%20.html'

Функция HTTPDecode портит строку [2] и [3], т.к. ей на вход нужно передавать Ansi строку.

UrlCanonicalizeW с флагом URL_UNESCAPE для строки [1] дает такой же результат как InternetCanonicalizeUrlW с флагами ICU_DECODE or ICU_NO_ENCODE: 'Заглавна 09;_страни 09;†Ð°'. Т.е. неверный, а строки [2] и [3] обрабатывает прекрасно.

В общем прошу помощи, поиск мне не помог.
Re: Декодирование канонизированного URL
От: Кодт Россия  
Дата: 15.07.10 12:50
Оценка:
Здравствуйте, Fedorenkov, Вы писали:

F>[1] '%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0'

F>[2] 'メインページ%20.html'
F>[3] 'メインページ%2520.html'

F>Строка [1] должна после преобразования иметь вид: 'Заглавная_страница' и проходить проверку IsUTF8String


Ожидаемый результат — байтовая или вордовая строка? UTF-8 поверх вордов?

F>Строка [2] должна превращаться в 'メインページ .html', а строка [3] соответственно в 'メインページ%20.html'


На входе — байтовая (в какой кодировке? UTF-8, японской) или вордовая (UTF-16, UCS-2) ?
На выходе — байтовая (в той же кодировке?) или вордовая?


F>В общем прошу помощи, поиск мне не помог.


Мне кажется, проще написать свой декодер, принимающий на вход как байтовые, так и вордовые строки — и возвращающий строки того же формата.
Плёвое же дело — проценты распарсить.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.