2 Xameleon > спасибо, что откликнулись, ибо топик вызван именно благодаря Вашим кодам, упомянутым в первом посте. Но вот url-кодирование там я как раз и не понял. Точнее, я понимаю их так, что работать Ваше url кодирование будет только для серверов , которые принимают windows-1251 кодировку, когда раскодируют url.
Объясню :
1) Ваш ответ выше говорит , что Вы не поняли моего вопроса от 2010-11-01 18:41:55. Там я не спрашивал - КАК делать url-кодирование некоей процедурой, а спрашивал - в какой кодировке на ее вход должны поступать данные для url-кодирования (или точнее %-кодирования).
2) НА вход Вашей UrlEncode поступает, как известно, строка типа WindowsUnicode1 (т.е. подмножество <= Utf16 от текущей выполняющейся Windows)
Далее в UrlEncode она посимвольно анализируется на допустимые символы - и возражений нет, когда выявленные т.о. допустимые символы Вы НЕ %-кодируете, а без изменения отправляете в результирующую строку (которая , конечно тоже WindowsUnicode1 типа).
Остальные символы Вашей исходной строки посимвольно AnsiCode=Asc(Mid(Text, i, 1)) Преобразовываются в ANSI (т.е. windows-1251 по нашенски если) после чего этот Ansi код %-кодируется и обратно преобразовывается в WindowsUnicode1: "%"+Hex(AnsiCode).
В итоге на выходе имеем WindowsUnicode1 строку, состоящую из разрешенных символов и %hh-кодов. Теперь далее - эта строка при отправке методом send объекта MSXML2.XMLHTTP превращается в байты посылаемого URL, из которых каждый соотвествует одному символу url-кодированной строки
Пример :
wЮ - UrlEncode("wЮ") -> w%DE
Сервер примет эти 4 байта w%DE и :
прежде всего их %-раскодирует(для этого процесса не надо знать ничего о кодировках) - получит 2 байта с кодами 77hex и DEhex и вот уже после :
ЕСЛИ ОН ЗНАЕТ что эти два байта в кодировке Windows-1251, то правильно их превратит в wЮ своей внутренней кодировки и далее использует полученные данные для того , чтобы, скажем, найти путь к каталогу с файлами /wЮ/тар-тата/та-та.
А Если сервер не о windows-1251, а думает , скажем , что это пришло в UTF-8 кодировке, то в этом случае он после %-декодирования превратит коды 77hex и DEhex -> в один только w (т.к. после первого корректно превращенного байта в w он встретит DEhex байт , не имеющий в UTF-8 корректного символа) и соответственно при построении пути будет вместо нужного
/wЮ/тар-тата/та-та использовать /w/тар-тата/та-та.
Т.о. вывод :
Нужно учитывать (как - вопрос отдельный) то в какой кодировке данные принимаютсмя сервером и соответсвенно поступают на вход процедуры url-кодирования, которая в этом случае, конечно, сильно усложняется, вот если сервер хочет , чтобы это была UTF-8 , то - пожалйста, для этого можно использовать encodeURIComponent от JScript, но если он хочет koi-8, и более ничего , то тогда Ваша процедура не должна сработать, как и , впрочем, encodeURIComponent - нужна такая url-кодирования, которая бы учитывала кодировку, которую хочет сервер.
Вот собственно об этом я и справшивал в предыдущем своем посте - как понять , на какую кодировку следует рассчитвать в процедуре делающую url-кодирование , т.е. - как определить эту кодировку?