1С 8.3 Перевод любых символов в Unicode
Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Перейти в раздел примеры кода 1С 8.3:
Конвертация строки в Unicode из любых символов в 1С 8.3:
Функция UnicodeDecodeAny(Строка) Экспорт
Результат = "";
Попытка //регулярное выражение
Колекция = Новый Массив; //РегВыр.Execute(Строка);
Для Каждого Элемент Из Колекция Цикл
Если СтрДЛина(Элемент.value) = 1 Тогда
Продолжить;
КонецЕсли;
КодСимвола = DecHex(Сред(ВРег(Элемент.value), 2));
Символ = Символ(КодСимвола);
Строка = СтрЗаменить(Строка, "\" + Элемент.value, Символ);
КонецЦикла;
Результат = Строка; //СтрЗаменить(Строка, "<br \/>", "");
Исключение
Результат = Строка;
Сообщить("Ошибка преобразования из Unicode", СтатусСообщения.Информация);
КонецПопытки;
Возврат Результат;
КонецФункции
Результат = "";
Попытка //регулярное выражение
Колекция = Новый Массив; //РегВыр.Execute(Строка);
Для Каждого Элемент Из Колекция Цикл
Если СтрДЛина(Элемент.value) = 1 Тогда
Продолжить;
КонецЕсли;
КодСимвола = DecHex(Сред(ВРег(Элемент.value), 2));
Символ = Символ(КодСимвола);
Строка = СтрЗаменить(Строка, "\" + Элемент.value, Символ);
КонецЦикла;
Результат = Строка; //СтрЗаменить(Строка, "<br \/>", "");
Исключение
Результат = Строка;
Сообщить("Ошибка преобразования из Unicode", СтатусСообщения.Информация);
КонецПопытки;
Возврат Результат;
КонецФункции
Пример №2 Конвертация строки из Unicode в UTF-8 (от пользователя Ruffer1C) в 1С 8.3:
Функция DecHex(Знач Значение)
Результат = 0;
Числа = Новый Соответствие;
Числа.Вставить("0", 0);
Числа.Вставить("1", 1);
Числа.Вставить("2", 2);
Числа.Вставить("3", 3);
Числа.Вставить("4", 4);
Числа.Вставить("5", 5);
Числа.Вставить("6", 6);
Числа.Вставить("7", 7);
Числа.Вставить("8", 8);
Числа.Вставить("9", 9);
Числа.Вставить("A", 10);
Числа.Вставить("B", 11);
Числа.Вставить("C", 12);
Числа.Вставить("D", 13);
Числа.Вставить("E", 14);
Числа.Вставить("F", 15);
//...
//перевод значения в строку
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
Значение = СокрЛП(Строка(Значение));
КонецЕсли;
МаксРазрядЦелых = СтрДлина(Значение) - 1;
ЮниКод = МаксРазрядЦелых;
Разр = 1;
Пока ЮниКод >= 0 Цикл
ТекЗначение = Числа.Получить(Сред(Значение, Разр, 1)) * Pow(16, ЮниКод);
Результат = Результат + ТекЗначение;
ЮниКод = ЮниКод - 1;
Разр = Разр + 1;
КонецЦикла;
Возврат Результат;
КонецФункции
Результат = 0;
Числа = Новый Соответствие;
Числа.Вставить("0", 0);
Числа.Вставить("1", 1);
Числа.Вставить("2", 2);
Числа.Вставить("3", 3);
Числа.Вставить("4", 4);
Числа.Вставить("5", 5);
Числа.Вставить("6", 6);
Числа.Вставить("7", 7);
Числа.Вставить("8", 8);
Числа.Вставить("9", 9);
Числа.Вставить("A", 10);
Числа.Вставить("B", 11);
Числа.Вставить("C", 12);
Числа.Вставить("D", 13);
Числа.Вставить("E", 14);
Числа.Вставить("F", 15);
//...
//перевод значения в строку
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
Значение = СокрЛП(Строка(Значение));
КонецЕсли;
МаксРазрядЦелых = СтрДлина(Значение) - 1;
ЮниКод = МаксРазрядЦелых;
Разр = 1;
Пока ЮниКод >= 0 Цикл
ТекЗначение = Числа.Получить(Сред(Значение, Разр, 1)) * Pow(16, ЮниКод);
Результат = Результат + ТекЗначение;
ЮниКод = ЮниКод - 1;
Разр = Разр + 1;
КонецЦикла;
Возврат Результат;
КонецФункции
1
комментарий
Михаил
26 авг 2024
Этот код не работает!
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник