Как декодировать (преобразовать) Unicode в 1С При разработке очередного обмена с интернет магазином через API столкнулисть что сайт возвращает ответ в виде:
Код VBS {"ok" :"true" ,"description" :"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d" }
из кода ясно что это JSON и используя код ПрочитатьJSON
Код 1C v 8.3 Чтение = Новый ЧтениеJSON;
Чтение. УстановитьСтроку( стрВходящая) ;
ДанныеЛога = ПрочитатьJSON( Чтение) ;
Чтение. Закрыть( ) ;
В переменной ДанныеЛога будет структура в виде
В результате получилась функция с 2-мя вариантами возрата, в зависимости от того как нужно
Код 1C v 8.3
Функция ДекодироватьUniCodeВJSON(стрВходящая)
Чтение = Новый ЧтениеJSON;
Чтение. УстановитьСтроку( стрВходящая) ;
ДанныеЛога = ПрочитатьJSON( Чтение) ;
Чтение. Закрыть( ) ;
Текст = "" ;
Для каждого Элемент Из ДанныеЛога Цикл
Текст = Текст + ? ( НЕ ПустаяСтрока( Текст) , Символы. ПС, "" ) ;
Текст = Текст + Элемент. Ключ + " = " + Элемент. Значение;
КонецЦикла ;
Возврат Текст;
Запись = Новый ЗаписьJSON;
Запись. УстановитьСтроку( Новый ПараметрыЗаписиJSON( ПереносСтрокJSON. Нет) ) ;
ЗаписатьJSON( Запись, ДанныеЛога, ) ;
Возврат Запись. Закрыть( ) ;
КонецФункции
На просторах интернета была найдена еще одна функция:
Код 1C v 8.3
Функция ПереобразоватьЮникод(Строка)
ГотововаяСтрока = "" ;
МасУкр = Новый Массив( 66 ) ;
МасУкр[0 ]= "А" ; МасУкр[1 ]= "Б" ; МасУкр[2 ]= "В" ; МасУкр[3 ]= "Г" ; МасУкр[4 ]= "Ґ" ; МасУкр[5 ]= "Д" ;
МасУкр[6 ]= "Е" ; МасУкр[7 ]= "Є" ; МасУкр[8 ]= "Ж" ; МасУкр[9 ]= "З" ; МасУкр[10 ]= "И" ; МасУкр[11 ]= "І" ;
МасУкр[12 ]= "Ї" ; МасУкр[13 ]= "Й" ; МасУкр[14 ]= "К" ; МасУкр[15 ]= "Л" ; МасУкр[16 ]= "М" ; МасУкр[17 ]= "Н" ;
МасУкр[18 ]= "О" ; МасУкр[19 ]= "П" ; МасУкр[20 ]= "Р" ; МасУкр[21 ]= "С" ; МасУкр[22 ]= "Т" ; МасУкр[23 ]= "У" ;
МасУкр[24 ]= "Ф" ; МасУкр[25 ]= "Х" ; МасУкр[26 ]= "Ц" ; МасУкр[27 ]= "Ч" ; МасУкр[28 ]= "Ш" ; МасУкр[29 ]= "Щ" ;
МасУкр[30 ]= "Ь" ; МасУкр[31 ]= "Ю" ; МасУкр[32 ]= "Я" ;
МасУкр[33 ]= "а" ; МасУкр[34 ]= "б" ; МасУкр[35 ]= "в" ; МасУкр[36 ]= "г" ; МасУкр[37 ]= "ґ" ; МасУкр[38 ]= "д" ;
МасУкр[39 ]= "е" ; МасУкр[40 ]= "є" ; МасУкр[41 ]= "ж" ; МасУкр[42 ]= "з" ; МасУкр[43 ]= "и" ; МасУкр[44 ]= "і" ;
МасУкр[45 ]= "ї" ; МасУкр[46 ]= "й" ; МасУкр[47 ]= "к" ; МасУкр[48 ]= "л" ; МасУкр[49 ]= "м" ; МасУкр[50 ]= "н" ;
МасУкр[51 ]= "о" ; МасУкр[52 ]= "п" ; МасУкр[53 ]= "р" ; МасУкр[54 ]= "с" ; МасУкр[55 ]= "т" ; МасУкр[56 ]= "у" ;
МасУкр[57 ]= "ф" ; МасУкр[58 ]= "х" ; МасУкр[59 ]= "ц" ; МасУкр[60 ]= "ч" ; МасУкр[61 ]= "ш" ; МасУкр[62 ]= "щ" ;
МасУкр[63 ]= "ь" ; МасУкр[31 ]= "ю" ; МасУкр[65 ]= "я" ;
МасКод = Новый Массив( 66 ) ;
МасКод[0 ]= "0410" ; МасКод[1 ]= "0411" ; МасКод[2 ]= "0412" ; МасКод[3 ]= "0413" ; МасКод[4 ]= "0490" ; МасКод[5 ]= "0414" ;
МасКод[6 ]= "0415" ; МасКод[7 ]= "0404" ; МасКод[8 ]= "0416" ; МасКод[9 ]= "0417" ; МасКод[10 ]= "0418" ; МасКод[11 ]= "0406" ;
МасКод[12 ]= "0407" ; МасКод[13 ]= "0419" ; МасКод[14 ]= "041A" ; МасКод[15 ]= "041B" ; МасКод[16 ]= "041C" ; МасКод[17 ]= "041D" ;
МасКод[18 ]= "041E" ; МасКод[19 ]= "041F" ; МасКод[20 ]= "0420" ; МасКод[21 ]= "0421" ; МасКод[22 ]= "0422" ; МасКод[23 ]= "0423" ;
МасКод[24 ]= "0424" ; МасКод[25 ]= "0425" ; МасКод[26 ]= "0426" ; МасКод[27 ]= "0427" ; МасКод[28 ]= "0428" ; МасКод[29 ]= "0429" ;
МасКод[30 ]= "042C" ; МасКод[31 ]= "042E" ; МасКод[32 ]= "042F" ;
МасКод[33 ]= "0430" ; МасКод[34 ]= "0431" ; МасКод[35 ]= "0432" ; МасКод[36 ]= "0413" ; МасКод[37 ]= "0491" ; МасКод[38 ]= "0434" ;
МасКод[39 ]= "0435" ; МасКод[40 ]= "0454" ; МасКод[41 ]= "0436" ; МасКод[42 ]= "0437" ; МасКод[43 ]= "0438" ; МасКод[44 ]= "0456" ;
МасКод[45 ]= "0457" ; МасКод[46 ]= "0439" ; МасКод[47 ]= "043A" ; МасКод[48 ]= "043B" ; МасКод[49 ]= "043C" ; МасКод[50 ]= "043D" ;
МасКод[51 ]= "043E" ; МасКод[52 ]= "043F" ; МасКод[53 ]= "0440" ; МасКод[54 ]= "0441" ; МасКод[55 ]= "0442" ; МасКод[56 ]= "0443" ;
МасКод[57 ]= "0444" ; МасКод[58 ]= "0445" ; МасКод[59 ]= "0446" ; МасКод[60 ]= "0447" ; МасКод[61 ]= "0448" ; МасКод[62 ]= "0449" ;
МасКод[63 ]= "044C" ; МасКод[31 ]= "044E" ; МасКод[65 ]= "044F" ;
тмпСтрока = "" ;
Для Счетчик = 1 По СтрДлина( Строка) Цикл
Если Лев( Строка, 1 ) = "\" Тогда
Если Лев( Строка, 2 ) = "\u" Тогда
тмпСтрока = Прав( Лев( Строка, 6 ) , 4 ) ;
Если МасКод. Найти( тмпСтрока) = Неопределено Тогда
СтрокаЗамены = Прав( тмпСтрока, 1 ) ;
тмпСтрока = СтрЗаменить( тмпСтрока, СтрокаЗамены, ТРег( СтрокаЗамены) ) ;
Если МасКод. Найти( тмпСтрока) = Неопределено Тогда
Сообщить( "Код символа не найден: " + тмпСтрока) ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод. Найти( тмпСтрока) ] ;
КонецЕсли ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод. Найти( тмпСтрока) ] ;
КонецЕсли ;
Строка = Прав( Строка, ( СтрДлина( Строка) - 6 ) ) ;
Иначе
Строка = Прав( Строка, ( СтрДлина( Строка) - 2 ) ) ;
КонецЕсли ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + Лев( Строка, 1 ) ;
Строка = Прав( Строка, ( СтрДлина( Строка) - 1 ) ) ;
КонецЕсли ;
КонецЦикла ;
Возврат ГотововаяСтрока ;
КонецФункции
Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты Алгоритм шифрования RC4 Для решения некоторых задач, иногда требуется имееть возможность шифровать и дешифровывать, какие-то данные. Но при этом нет возможности использовать стороние внешнии компоненты.
Предлагаем пример реализации алгоритма шифрования RC4 на встроенном языке 1С.
Код 1C v 7.x // оперделим два массива для формирования S-Блока
перем масТемп[254], масSБлок[254];
// переменая для управления объектом Script Control
перем олеШелл;
//*******************************************
// стрКодировать(стрИсточник, стрКлюч)
//
// Параметры:
// стрИсточник - Строка. Набор симвлов для преобразования.
// стрКлюч - Строка. Набор симвлов для формирования S-Блока.
//
// Возвращаемое значение:
// Строка. Набор симвлов после преоброзования.
//
// Описание:
// Функция шифрует или дешифрует набор символов с помощью
// S-Блока сформированного на основе ключа.
//
функция стрКодировать(стрИсточник, стрКлюч)
// Инициализация данных для формирования S-Блока
чисДлинаКлюча = стрдлина(стрКлюч);
у = 0;
для х = 1 по 254 цикл
у = у + 1;
у = ?(у > чисДлинаКлюча, 1, у);
масТемп[х] = кодсимв(сред(стрКлюч, у, 1));
масSБлок[х] = х - 1;
конеццикла;
// Формирование S-Блока
у = 0;
для х = 1 по 254 цикл
у = (у + масТемп[х] + масSБлок[х]) % 254 + 1;
чисТемп = масSБлок[х];
масSБлок[х] = масSБлок[у];
масSБлок[у] = чисТемп;
конеццикла;
// Ну и сообственно преобразование
чисДлинаТекста = стрдлина(стрИсточник);
у = 0;
ч = 0;
для х = 1 по чисДлинаТекста цикл
чисБайт = кодсимв(сред(стрИсточник, х, 1));
у = (у + 1) % 254 + 1;
ч = (ч + масSБлок[у]) % 254 + 1;
чисТемп = масSБлок[у];
масSБлок[у] = масSБлок[ч];
масSБлок[ч] = чисТемп;
чисТемп = масSБлок[(масSБлок[у] + масSБлок[ч]) % 254 + 1];
чисБайт = число(олеШелл.Run("intXOR ", чисБайт, чисТемп));
Ответ = Ответ + симв(чисБайт);
конеццикла;
// Возвращаем полученную строку
возврат Ответ;
конецфункции
//*******************************************
// Этот блок обязателен.
// Необходимо что бы он отработал до первого вызова
// функции стрКодировать
//*******************************************
// Создаем объект для управления скриптами
олеШелл = создатьобъект("MSScriptControl.ScriptControl");
// Устанавливаем рабочий язык для выполнения скриптов
олеШелл.Language = "VBScript";
// Сам срипт для проведения логически-исключающего сложение двух операндов
стрКод =
"function intXOR (x, y)
| intXOR = x xor y
|end function";
// Добавим наш скрипт в котрол скриптов
олеШелл.AddCode(стрКод);
Ответ = стрКодировать("Это пример реализации алгоритма шифрования RC4 на языке 1С", "Казахстанский Клуб профессионалов 1С");
сообщить(Ответ);
Ответ = стрКодировать(Ответ, "Казахстанский Клуб профессионалов 1С");
сообщить(Ответ);
Скачивать файлы может только зарегистрированный пользователь!
Решение предложил IUnknown Категория:
COM-объекты, WMI, WSH