На просторах интернета можно встретить разные методы изменения кодировки строки в 1С. Но большинство советов сводятся к использованию объектов ЗаписьТекста, ЧтениеТекста (ну или XML). Что в общем то как минимум не оптимально, а в случае использования SSD в качестве основных носителей информации наносит им непоправимый вред (как известно количество циклов перезаписи конечно).
Кроме того понадобилось разбирать и читать заголовки писем не средствами 1С (и в этот раз ничего хорошего в их адрес сказать не могу). Как результат столкнулся с необходимостью разбора MIME (см. в вике), преобразования из base64 и в нее (опять таки см. в вике).
В итоге было создано два общих модуля для выполнения данных преобразованию (можно скачать во вложениях).
Общие модули могут быть внедрены в любую конфигурацию на БСП, или там где есть модуль «СтроковыеФункцииКлиентСервер» (в частности используется метод РазложитьСтрокуВМассивПодстрок), или если данный вызов «обезвредить» вообще в любую конфигурацию. И кстати данный код не сложно транслировать в 7.7.
Какие методы реализованы
- СтрокаВBase64 — кодирование строки в формат base64 *
- Base64ВСтроку — декодирование строки из формата base64
- СтрокаВUTF_8 — кодирование строки в utf-8
- UTF_8ВСтроку — декодирование строки из формата utf-8
- MIMEВСтроку — декодирование строки из формата MIME (с учетом преобразования и кодировки)
- СтрокаВMIME — кодирование строки в формат MIME (с учетом преобразования и кодировки)
- ДекодироватьСтроку — декодирование строки (с указанием исходной кодировки)
- ЗакодироватьСтроку — кодирование строки (с указанием результирующей кодировки)
* Поскольку в исходных строках может быть кирилица, рекомендуется сначала переводить в utf-8. Латиница может кодироваться напрямую.
Допустимые кодировки
Также для общего развития можно почитать вот эту статью в любимой вике.
Рекомендации: оба общих модуля устанавливать с признком «Клиент, Сервер, ВнешнееСоединение». Для модуля «СтроковыеФункцииСлужебныйКлиентСерверПовтИсп» добавить признак повторного использования на время сеанса.
Спасибо.
Сейчас потестируем 🙂
Какую кодировку принимает функция СтрокаВBase64 в качестве параметра?
(2) adhocprog, кодировка не имеет значения. Можешь передавать что utf-8 строку.
Например: заголовки e-mail кодированы в base64, при этом исходная строка может быть koi-8r или utf-8.
Вроде так. Если вдруг я не прав, поправьте.
подскажите как быть с кодировкой CP1251 → CP866 ???
(4) freud, декодировать строку из 1251, потом закодировать в 866 не помогает?
Отлично написаны модули, но не работают, «то ли лыжи, то ли я»…
декодер1 или декодер2 ) определяет текст «Попов» и кодировки «CP1251 → UTF-8».
Берем строку: «РџРѕРїРѕРІ».
Онлайн декодировщик (
А с вашими модулями, я что только не творил… По смыслу нужно использовать:
И ваша функция на выходе дает тот же результат: «РџРѕРїРѕРІ».
Подскажете, «где собака зарыта»?
СПАСИБО!!!!
(5) скачал вашу обработку, чтобы выполнить следующую операцию.
Строку преобразовать в base64.
Исходная строка «>ґ‚ћIbЦAвGcЁчl•Џќ~o¶»
должно получиться «PrSCnkli1kHiR2Oo92yVj51+b7Y=»
увы не получается.
написал следующий код
Результат=СтроковыеФункцииКлиентСерверДоп.Base64ВСтроку(Значение);
подскажите если сделал что-то не то.
(9) ChunLee, в base64 или из? попробуй итоговую строку закодируй, сравни результат. И ещё если данные из поля формы, они могут быть ошибочными.
Добрый день! Спасибо за вашу разработку.
В кодировке win1251 у вас пропущены символы с кодами 160 (неразрывный пробел) и 173 (символ вообще в конфигураторе не отображается, но тем не менее он там есть, если набрать его через alt+0173).
Не работает. Конфигурация КА 1.3.
Текстовый файл в UTF-8 как были загогулины так и остаются…
(Нужно преобразовать в строку)
(12) можете сделать тест? Прошу прислать на почту vandalsvq[собака]gmail.com
(13) тест это как ? Я взял из вашего списка процедуру «UTF_8ВСтроку» она выдает ровно туже строку. Онлайн определение кодировки текста выдает utf-8,
word тоже.
В общем кодировка в итоге оказалась «UTF-16LE» ….. )
Все прочиталось как нужно.
Так что главное определить верно кодировку.
(15) т.е. проблемы не обнаружено? Кстати есть есть процедура преобразования можешь поделиться с народом.
(16)ну да. 1с сама все прочла как нужно, если кодировку укажешь верную. Так что процедура не понадобилась.
Кодировку определили с помощью «Akelpad».