Кому интересна теория - см. RFC 2396 часть 2
Собственно код:
Функция Из16ВЧисло(Знач Значение)
 
     Результат = 0;
     Множитель = 1;
     Пока Значение <> "" Цикл
         Результат = Результат + Множитель * (Найти("0123456789ABCDEF", Прав(Значение,1))-1);
         Множитель = Множитель * 16;
         Значение = Лев(Значение,СтрДлина(Значение)-1);
     КонецЦикла;
     Возврат Результат;
 
 КонецФункции
 
 Функция ДекодироватьURL(URL, WindowsFileURI=Истина)
 
     ДлинаСтроки = СтрДлина(URL);
     Инд = 1;
     Результат = "";
     ПолныйКод = 0;
     ОсталосьСимволов = 0;
 
     Пока Инд <= ДлинаСтроки Цикл
 
         Код = КодСимвола(URL, Инд);
 
         Если Код = 37 Тогда
             // Символ(37) = "%"
             Код = Из16ВЧисло(Сред(URL, Инд+1, 2));
             Инд = Инд + 2;
         ИначеЕсли ОсталосьСимволов = 0 Тогда
             Если (Код = 43) и (не WindowsFileURI) Тогда
                 // Символ(43) = "+"
                 Код = 32; // Символ(32) = " " (пробел)
             КонецЕсли;
             Результат = Результат + Символ(Код);
             Инд = Инд + 1;
             Продолжить;
         КонецЕсли;
 
         Если Код <= 127 Тогда
             // Код = 0b0ххххххх
             Результат = Результат + Символ(Код);
         ИначеЕсли Код <= 191 Тогда
             // Код = 0b10хххххх
             ПолныйКод = (ПолныйКод*64) + (Код%64); // shl(ПолныйКод, 6) + (Код & 0x3F)
             ОсталосьСимволов = ОсталосьСимволов - 1;
             Если ОсталосьСимволов = 0 Тогда
                 Результат = Результат + Символ(ПолныйКод);
             КонецЕсли;
         ИначеЕсли Код <= 223 Тогда
             // Код = 0b110ххххх
             ПолныйКод = Код % 32; // Код & 0x1F
             ОсталосьСимволов = 1;
         ИначеЕсли Код <= 239 Тогда
             // Код = 0b1110хххх
             ПолныйКод = Код % 16; // Код & 0x0F
             ОсталосьСимволов = 2;
         ИначеЕсли Код <= 247 Тогда
             // Код = 0b11110ххх
             ПолныйКод = Код % 8; // Код & 0x07
             ОсталосьСимволов = 3;
         ИначеЕсли Код <= 251 Тогда
             // Код = 0b111110хх
             ПолныйКод = Код % 4; // Код & 0x03
             ОсталосьСимволов = 4;
         ИначеЕсли Код <= 253 Тогда
             // Код = 0b1111110х
             ПолныйКод = Код % 2; // Код & 0x01
             ОсталосьСимволов = 5;
         КонецЕсли;
 
         Инд = Инд + 1;
     КонецЦикла;
 
     Возврат Результат;
 КонецФункции
 
Примеры:
URL = ДекодироватьURL("http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80");
// URL = "http://ru.wikipedia.org/wiki/Пример"
URL = ДекодироватьURL("c:\documents%20and%20settings\");
// URL = "c:\documents and settings\"
Вот и все)
PS. Очень жаль, что 1С в платформе 8.х до сих пор не реализовала битовых операций. Поэтому реализация данной функции не столь изящна, как могла бы быть.
Updated 10.12.11: Исправлена ошибка при декодировании URI в протоколе file:// в Windows. Добавлен второй параметр в функции WindowsFileURI - признак того, что декодируется именно такая строка. При значении этого параметра Ложь - обработка как для "обычных" :) интеренет протоколов.
Вступайте в нашу телеграмм-группу Инфостарт
 
                                    