Изменение кодировки и другие преобразования над строками (upd 12.2022)

10.12.22

Разработка - Инструментарий разработчика

Изменение кодировки (туда и обратно), транспортное кодирование (base64), чтение полей MIME. Без использования чтения и записи в файл, только штатными средствами 1С.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
СтроковыеФункцииПТБКлиентСервер.zip
.zip 8,28Kb
217
217 Скачать (2 SM) Купить за 2 150 руб.

Обновление статьи от 10.12.2022

Когда была написана первая версия статьи способов кодировки в платформе было не сказать что много. И предыдущая версия была "попыткой" решить данную проблему, а также сделать с учетом работы на клиенте и на сервере. В ней были проблемы, ошибки, в общем там не все получилось. Однако, после выхода платформы 8.3.10 для перекодирования лучше использовать средства платформы. Собственно что и было сделано.

Некоторые методы были удалены, однако разбор MIME (см. в вике) в частности остался.

Для перекодирования нужен только один общий модуль "СтроковыеФункцииКлиентСервер". Второй используется для дополнительных методов (см. ниже)

Какие методы реализованы

  • СтрокаВBase64 - кодирование строки в формат base64
  • Base64ВСтроку - декодирование строки из формата base64
  • СтрокаВUTF_8 - кодирование строки в utf-8
  • UTF_8ВСтроку - декодирование строки из формата utf-8
  • MIMEВСтроку - декодирование строки из формата MIME (с учетом преобразования и кодировки)
  • СтрокаВMIME - кодирование строки в формат MIME (с учетом преобразования и кодировки)
  • ДекодироватьСтроку - декодирование строки (с указанием исходной кодировки)
  • ЗакодироватьСтроку - кодирование строки (с указанием результирующей кодировки)

Для перекодирования и преобразования в base64 используются методы для работы с буфером двоичных данных.

Все поддерживаемые кодировки можно посмотреть в методе ПолучитьСтрокуИзБуфераДвоичныхДанных.

Новое в версии от 10.12.2022

Дополнительно в текущей версии есть:

  • методы для нечеткого сравнения строк (метод Жаккара), проверки эквивалентности слов и строк
  • методы для склонения ФИО
  • метод для замены спец. символов XML на значения

Технические детали

  • платформа 8.3.10+
  • наличие БСП (модуль "СтроковыеФункцииКлиентСервер" метод, ЗаменитьОдниСимволыДругими)

Оба общих модуля устанавливать с признаком "Клиент, Сервер, ВнешнееСоединение". Для модуля "СтроковыеФункцииСлужебныйКлиентСерверПовтИсп" добавить признак повторного использования на время сеанса.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    172075    964    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14572    109    46    

108

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17344    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27366    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11955    45    33    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191342    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18113    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1153    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. adhocprog 1144 08.01.15 02:22 Сейчас в теме
Спасибо.
Сейчас потестируем :)
2. adhocprog 1144 08.01.15 03:28 Сейчас в теме
Какую кодировку принимает функция СтрокаВBase64 в качестве параметра?
3. vandalsvq 1592 09.01.15 10:44 Сейчас в теме
(2) adhocprog, кодировка не имеет значения. Можешь передавать что utf-8 строку.
Например: заголовки e-mail кодированы в base64, при этом исходная строка может быть koi-8r или utf-8.
Вроде так. Если вдруг я не прав, поправьте.
4. freud 2 29.07.15 08:58 Сейчас в теме
подскажите как быть с кодировкой CP1251 → CP866 ???
5. vandalsvq 1592 29.07.15 12:04 Сейчас в теме
(4) freud, декодировать строку из 1251, потом закодировать в 866 не помогает?
9. ChunLee 04.09.16 16:52 Сейчас в теме
(5) скачал вашу обработку, чтобы выполнить следующую операцию.
Строку преобразовать в base64.
Исходная строка ">ґ‚ћIbЦAвGcЁчl•Џќ~o¶"
должно получиться "PrSCnkli1kHiR2Oo92yVj51+b7Y="
увы не получается.
написал следующий код
Результат=СтроковыеФункцииКлиентСерверДоп.Base64ВСтроку(Значение);
подскажите если сделал что-то не то.
10. vandalsvq 1592 04.09.16 20:48 Сейчас в теме
(9) ChunLee, в base64 или из? попробуй итоговую строку закодируй, сравни результат. И ещё если данные из поля формы, они могут быть ошибочными.
6. ogre2007 302 01.02.16 22:08 Сейчас в теме
Отлично написаны модули, но не работают, "то ли лыжи, то ли я"...
Берем строку: "РџРѕРїРѕРІ".
Онлайн декодировщик (декодер1 или декодер2) определяет текст "Попов" и кодировки "CP1251 → UTF-8".
А с вашими модулями, я что только не творил... По смыслу нужно использовать:
ДекодироватьСтроку(Объект.СтрокаДляПреобразования,"windows-1251");
//благо мы знаем, что это windows-1251

И ваша функция на выходе дает тот же результат: "РџРѕРїРѕРІ".
Подскажете, "где собака зарыта"?
8. ChunLee 04.09.16 16:45 Сейчас в теме
(6) ogre2007, Результат=ДекодироватьСтроку(Объект.СтрокаДляПреобразования,"windows-1251");
Вот так надо писать
18. endym 215 07.09.17 15:19 Сейчас в теме
(8)
исходная строка РРњ-0000048449

метод декодировать все также возвращает эту строку ничем ее не заменив.
7. Bonov 25.08.16 20:26 Сейчас в теме
11. Gvenor 130 15.12.16 07:24 Сейчас в теме
Добрый день! Спасибо за вашу разработку.
В кодировке win1251 у вас пропущены символы с кодами 160 (неразрывный пробел) и 173 (символ вообще в конфигураторе не отображается, но тем не менее он там есть, если набрать его через alt+0173).
12. sb111 9 02.02.17 17:16 Сейчас в теме
Не работает. Конфигурация КА 1.3.
Текстовый файл в UTF-8 как были загогулины так и остаются...
(Нужно преобразовать в строку)
13. vandalsvq 1592 02.02.17 21:00 Сейчас в теме
(12) можете сделать тест? Прошу прислать на почту vandalsvq[собака]gmail.com
14. sb111 9 03.02.17 11:18 Сейчас в теме
(13) тест это как ? Я взял из вашего списка процедуру "UTF_8ВСтроку" она выдает ровно туже строку. Онлайн определение кодировки текста выдает utf-8,
word тоже.
15. sb111 9 03.02.17 12:00 Сейчас в теме
В общем кодировка в итоге оказалась "UTF-16LE" ..... )
Все прочиталось как нужно.
Так что главное определить верно кодировку.
16. vandalsvq 1592 03.02.17 13:59 Сейчас в теме
(15) т.е. проблемы не обнаружено? Кстати есть есть процедура преобразования можешь поделиться с народом.
17. sb111 9 03.02.17 16:54 Сейчас в теме
(16)ну да. 1с сама все прочла как нужно, если кодировку укажешь верную. Так что процедура не понадобилась.
Кодировку определили с помощью "Akelpad".
19. vandalsvq 1592 10.12.22 19:42 Сейчас в теме
Методы были обновлены, используются штатные механизмы для перекодирования строк. Однако минимальные требования к платформе изменились, но мне кажется все уже на 8.3.10+ сидят.
20. kembrik 10 26.05.23 10:29 Сейчас в теме
(19) Добрый день, а нештатные механизмы остались? Приходит base64 строка в =?windows-1251?B? например, хотел посмотреть алгоритм для декодирование, так как почту разбираю 1С Исполнителем а там свой декодировщик Base64 пока только для UTF-8 - Хотел сделать по аналогии

И второй вопрос - умеет ли обработка декодировать "сложные случаи" типа =?UTF-8?B?0KHQutC70LDQtCDQntCe0J4g0JPQsNGA0LDQvdGCINC00LvRjyDQkdGL0YHR­gtGA0L7QutCw0LHQtdC7?= =?UTF-8?B?0YwsIFJ1c0NhYmxlLCDQmtCw0LHQtdC70YzQvdGL0Lkg0YHQv9GA0LDQstC+­0YfQvdC40LosINCT0LQ=?= =?UTF-8?B?0LXQmtCw0LHQtdC70YwsINCa0LDQsdC10LvRjCDQntC90LvQsNC50L0uINGC­LiA4LTkwOS0zNDMtMTMt?= 00..xls

когда у нас строки надо сначала вырезать, декодировать а потом сложить
21. vandalsvq 1592 29.05.23 13:10 Сейчас в теме
(20) добрый день, нештатных вроде как не осталось, все выпилил. "Сложные случаи" нет, разбить на подстроки и обрабатывать отдельно.

Ох уж эти почтовые сообщения, вспоминаю и вздрагиваю. Если что все ОМ можно взять в репозитории - https://github.com/progtb/ptb_ssl. Качать тут или нет - уже по желанию (поблагодарить автора или нет).
26. kembrik 10 10.01.24 17:48 Сейчас в теме
(21)В итоге был допилен Исполнитель, почти все необходимое по перекодированию туда подвезли, спасибо
vandalsvq; +1 Ответить
27. vandalsvq 1592 10.01.24 18:06 Сейчас в теме
(26) исполнитель приятно удивляет своим развитием. Тоже сейчас его использую и как кстати они подвезли МониторФайловойСистемы. Прямо вот в точку
28. kembrik 10 11.01.24 10:08 Сейчас в теме
(27) Да,монитор неплох, пятая версия тестовая пока не радует с модульностью, но в проде уже кучу скриптов с питона на исполнитель переделали
22. vandalsvq 1592 29.05.23 13:11 Сейчас в теме
(20) нештатные методы работали если честно плохо. а точнее не всегда правильно работали. В коммитах репы можно будет найти предыдущие версии
23. Xershi 1561 16.08.23 14:48 Сейчас в теме
Помогло только такое, штатное не работало, баг платформы наверное 1С:Предприятие 8.3 (8.3.23.1688):
&НаСервереБезКонтекста
Функция ПерекодироватьТекст(КодируемыйТекст, НачальнаяКодировка = "utf-8", КонечнаяКодировка = "windows-1251")
    
    Стрим           = Новый COMОбъект("Adodb.Stream");
    Стрим.Type      = 2;
    Стрим.Mode      = 3;
    Стрим.charset   = НачальнаяКодировка;
    Стрим.Open();
    Стрим.WriteText(КодируемыйТекст);
    Стрим.Position  = 0;
    Стрим.charset   = КонечнаяКодировка;
    ПерекодируемыйТекст = Стрим.ReadText(-1);
    Стрим.Close();
	
	Возврат ПерекодируемыйТекст;
    
КонецФункции
Показать
24. HappYNooB 06.01.24 18:03 Сейчас в теме
Функция ПерекодироватьТекст(КодируемыйТекст, НачальнаяКодировка = "UTF-16BE", КонечнаяКодировка = "windows-1251")
	
	ПотокДанных = Новый ПотокВПамяти;
	ЗаписьТекста = Новый ЗаписьТекста(ПотокДанных , НачальнаяКодировка);
	ЗаписьТекста.Записать(КодируемыйТекст);
	ЗаписьТекста.Закрыть();
	ПотокДанных.Перейти(0,ПозицияВПотоке.Начало);
	ЧтениеТекста = Новый ЧтениеТекста(ПотокДанных, КонечнаяКодировка);
	ПерекодируемыйТекст = ЧтениеТекста.Прочитать();
    
    Возврат ПерекодируемыйТекст;
    
КонецФункции
Показать
n_mezentsev; +1 Ответить
25. vandalsvq 1592 07.01.24 19:12 Сейчас в теме
(24) увы данный код не выполнить в веб-клиенте. Может еще так попробовать?

	БуферДанных = ПолучитьБуферДвоичныхДанныхИзСтроки(Значение, ИсхКодировка);
	Возврат ПолучитьСтрокуИзБуфераДвоичныхДанных(БуферДанных, КонКодировка);


Я честно скажу, не проверял как сработает
Оставьте свое сообщение