Имя: Пароль:
1C
1С v8
v8: Перекодировка строки(url encode): подскажите!
0 1C-band
 
31.07.12
12:41
Сабж!
Исходная строка, например: "Москва";
На выходе необходимо получить: "%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0".
Подскажите, как?
1 Eugene_life
 
31.07.12
12:42
(0) А это на каком языке-то?
2 pumbaEO
 
31.07.12
12:43
(1) url encode
3 Eugene_life
 
31.07.12
12:44
(2) Охренеть.. 1С-ники знают все!
4 Balabass
 
31.07.12
12:44
Ну 1с вроде не умеет сохранять в кодировках внешние файлы? не?
5 Balabass
 
31.07.12
12:45
Надо наверно какой то внешний редактор подключать.
6 Balabass
 
31.07.12
12:46
На выходе - куда текст идти будет? в файл?
7 Balabass
 
31.07.12
12:46
или таблицы будут?
8 pumbaEO
 
31.07.12
12:46
На


Функция hex(Знач Значение)
   Значение=Число(Значение);
   Если Значение<=0 Тогда
       Результат="0";
   Иначе
       Значение=Цел(Значение);
       Результат="";
       Пока Значение>0 Цикл
           Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%16 + 1,1)+Результат;
           Значение=Цел(Значение/16) ;
       КонецЦикла;
   КонецЕсли;
   Если СтрДлина(Результат) < 2 Тогда
   
       Результат = "0" + Результат;
   
   КонецЕсли;
   Возврат "%" + Результат;
КонецФункции

Функция EncodeURL(URL)
   
   // отсюда: http://www.w3.org/International/URLUTF8Encoder.java
   
   Рез = "";
   
   Для Сч = 1 По СтрДлина(URL) Цикл
       
       ch = Сред(URL,Сч,1);
       vch = КодСимвола(ch);
       
       Если ("A" <= ch ) И ( ch <= "Z") Тогда        // "A".."Z"
           Рез = Рез + ch;
       ИначеЕсли ("a" <= ch ) И ( ch <= "z") Тогда    // "a".."z"
           Рез = Рез + ch;
       ИначеЕсли ("0" <= ch ) И ( ch <= "9") Тогда    // "0".."9"
           Рез = Рез + ch;
       ИначеЕсли (ch = " ") ИЛИ ( ch = "+") Тогда            // space
           Рез = Рез + "+";
       ИначеЕсли (ch = "-" ) ИЛИ ( ch = "_") Тогда        // unreserved
           // ch == '.' || ch == '!'
           // ch == '~' || ch == '*'
           // ch == '\'' || ch == '('
           // ch == ')') Тогда
           Рез = Рез + ch;
       ИначеЕсли (vch <= 127) Тогда        // other ASCII
           Рез = Рез + hex(vch);
       ИначеЕсли (vch <= 2047) Тогда        // non-ASCII <= 0x7FF
           Рез = Рез + hex(192 + Цел(vch / 64));
           Рез = Рез + hex(128 + (vch % 64));
       Иначе                    // 0x7FF < ch <= 0xFFFF
           Рез = Рез + hex(224 + Цел(vch / 4096));
           Рез = Рез + hex(128 + (Цел(vch / 64) % 64));
           Рез = Рез + hex(128 + (vch % 64));
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат Рез;

КонецФункции // ()
9 1C-band
 
31.07.12
12:49
(8) Спасибо! Для русских, как раз, строк мне надо... Вроде должно подойти?
10 Balabass
 
31.07.12
12:50
Так а для чего это все  - расскажите.
11 Eugene_life
 
31.07.12
12:51
(10) Шифруется человек
12 Kreont
 
31.07.12
12:51
(8) В базу добавь, пригодится не один раз.
13 1C-band
 
31.07.12
12:54
(10) Чтобы при вызове Google Maps API, например (да всего в интернете), русские буквы хавало.
14 1C-band
 
31.07.12
12:56
Отлично! Спасибо ещё раз!