Запись текста в кодировке UTF-8 без BOM средствами платформы 1С

06.02.14

Разработка - Универсальные функции

Запись текста в кодировке UTF-8 без BOM средствами платформы 1С (без "извращений")

Собствено говоря это решение  мной уже было опубликовано в виде коментария к статье //infostart.ru/public/137454/
Но вчера я получил в личку письмо, из которого следует, что оно достойно отдельной публикации.

Вот собственно говоря само решение:

ЗТ = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
ЗТ.Закрыть();
ЗТ = Новый ЗаписьТекста(ИмяФайла,,, Истина, Символы.ПС);
ЗТ.Записать(Данные);
ЗТ.Закрыть();

BOM

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2669    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4602    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8813    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7242    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 214 06.02.14 16:16 Сейчас в теме
2. WKBAPKA 214 06.02.14 16:17 Сейчас в теме
ставлю минус за оформление публикации
baracuda; artichoke; +2 2 Ответить
3. pavel_pss 289 11.02.14 18:26 Сейчас в теме
(2) WKBAPKA,
Не нравится оформление публикации не смотри.
mc2; AlekseyBelyy; user906806; pogroleg; mzelensky; +5 2 Ответить
4. pumbaE 12.02.14 10:29 Сейчас в теме
Ты точно utf с ansi не попутал? минус заслуженный, лучше бы решение с base64 привел.

p.s.: Пользователи любых других национальных языков просто в восторге, от такого фигового решения.
5. mc2 19 12.02.14 15:46 Сейчас в теме
(4) pumbaE, Если Вы не понимаете о чем идет речь, то нечего умничать. Для таких непонятливых поясняю: есть задача записать файл в кодировке UTF-8 без BOM, т.к. он не всегда корректно распознается сторонними приложениями, например, при передаче POST-запроса через HTTP-соединение. Приведенный алгоритм это делает наиболее простым способом. Если вам известен более простой способ, то лучше его опубликовать, чем вводить в заблуждение других людей.

Для совсем непонятливых: ВОМ это 3 символа, которые добавляются в начало файла для автоматического определения кодировки.

P.S. "Тыкать" можете своим друзьям, а здесь этого не надо делать.
MaxHoga; SergeyRomanov; simuljakr; AlekseyBelyy; artichoke; olegans; adhocprog; +7 2 Ответить
6. pumbaE 12.02.14 16:22 Сейчас в теме
(5) повторяю таблица кодировки UTF-8 содержит больше символов чем ANSI, поэтому преобразование к ANSI может не только убрать первые 3 байта, но и испортить содержание документа. В той же публикации более элегантное решение http://forum.infostart.ru/forum24/topic62033/message707087/#message707087

p.s.: это интернет, могут и послать.
baracuda; CodeNull; kinazarov; +3 Ответить
7. mc2 19 12.02.14 23:16 Сейчас в теме
(6) pumbaE, 1. В моем алгоритме НЕТ вообще нет преобразований кодировок! Прочитайте документацию по языку программирования 1С. Суть алгоритма в том, что сначала создается пустой файл в кодировке ANSI, который не содержит ВОМ, а затем к нему дописываются данные в кодировке UTF-8. Это происходит без каких-либо преобразований. Естественно, при дописывании данных ВОМ не пишется.

2. Это реально работает, сам давно использую. Прежде чем писать всякую чушь, надо было хотя бы разобраться или проверить.

3. Алгоритм с отрезанием ВОМ однозначно является более громоздким и ресурсоемким.

P.S. Насчет "послать" - это все-таки модерируемый технический форум, за это могут и "забанить", т.ч. стоит это учитывать при выборе стиля общения...
simuljakr; adt; artichoke; hasr; mityushov.vv; asdfr16; tormozit; user799503; Sirin; aleksanderpushkin; kuzyara; Tolpinski; 1ckorolev; Hexed; nick-max; slavikss; +16 1 Ответить
8. Hexed 2 09.08.16 16:09 Сейчас в теме
9. 1ckorolev 17.11.16 13:52 Сейчас в теме
Спасибо! Помогло!

Возможно полезное дополнение. Батники не работают нормально по умолчанию с utf-8 поэтому первой строчкой можно поставить:
"chcp 65001" .
10. Serginio 938 17.11.16 14:14 Сейчас в теме
Функция Кодировка_UTF8_NoBOM()
    Возврат "CESU-8";
КонецФункции
begemot; MaZaHacKa_13; Tria; Andreynikus; Lapitskiy; officeRebot; madgahed; uno-c; Vostr; artkor; spectre1978; echo77; user743891; METAL; RomanMartynenko; master555; Gureev; ditp; +18 Ответить
11. Gerts 12 01.08.17 05:02 Сейчас в теме
С одной стороны: Описание не подробно.
С другой: "Краткость - сестра таланта".
Подробно было бы интересно новичкам, а многим суть понятна и так.
Я ставлю "+".
Написано по сути, работает. Большего не надо.
Dmitryiv; simuljakr; artichoke; +3 Ответить
12. ilyay 01.12.17 10:59 Сейчас в теме
http://www.unicode.org/reports/tr26/

CESU-8 сначала хотели назвать UTF-8S, но потом переименовали в CESU-8, чтобы не думали, что это UTF-8.

Короче, эта кодировка не во всем является UTF-8, т.к. ее целью было облегчить UTF-16.

Так что правильнее отрезать BOM от файла.

В 8.3 в ЗаписьXML в функции ОткрытьФайл есть 3-й параметр:
ОткрытьФайл(<ИмяФайлаXML>, <ТипКодировки>, <ДобавлятьBOM>)
mc2; Seneka7608; METAL; +3 Ответить
17. uno-c 234 16.12.20 22:22 Сейчас в теме
(12)
CESU-8 A Unicode code point from the Basic Multilingual Plane (BMP), i.e. a code point in the range U+0000 to U+FFFF, is encoded in the same way as in UTF-8

Эска символы Юникода после U+FFFF вообще не понимает, поэтому в контексте 1С можно сказать, что UTF-8 и CESU-8 - это одинаковые кодировки.
Сообщить(КодСимвола(Символ(65534)));
Сообщить(КодСимвола(Символ(65535)));//FFFF
Сообщить(КодСимвола(Символ(65536)));
Сообщить(КодСимвола(Символ(65537)));
Сообщить(КодСимвола(Символ(65538)));
Сообщения:
65 534
65 535
-1
-1
-1
13. Casey1984 3 26.07.18 12:20 Сейчас в теме
Благодарю! Коротко, ясно, легко встраивается в код и работает ;-)
14. violencethepepper 16.04.19 10:22 Сейчас в теме
Огромное спасибо! Нашел ответ который искал очень давно!
15. magv 18 14.07.20 15:55 Сейчас в теме
Для объекта HTTPЗапрос это можно изменить в процедуре УстановитьТелоИзСтроки() в третьем параметре:
ЗаголовокHTTP = Новый Соответствие;
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
ЗаголовокHTTP.Вставить("Authorization", "Token " + ПолучитьТокен());

Запрос = Новый HTTPЗапрос(АдресРесурса, ЗаголовокHTTP); 
Запрос.УстановитьТелоИзСтроки(ПреобразоватьДанныеВJSON(Данные), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
simuljakr; Tria; +2 Ответить
20. user1798873 18.08.22 08:47 Сейчас в теме
(15)
ПреобразоватьДанныеВJSON

Помогло)
16. denisvilny 14.09.20 18:04 Сейчас в теме
Спасибо большое! Очень помогло!
18. hasr 10.06.21 17:58 Сейчас в теме
19. mdzen 238 06.05.22 19:11 Сейчас в теме
Спасибо! Просто и без вывертов!
21. Gonchar-A 28.02.23 11:48 Сейчас в теме
Для тех у кого платформа 8.2 и ниже самое простое!
22. user609122_a.lenartovich 28.06.23 20:32 Сейчас в теме
Очень хорошо!
Основное преимущество мало букв!
Талант!
23. sigma17 12 31.01.24 13:30 Сейчас в теме
24. Dmitryiv 161 08.02.24 19:11 Сейчас в теме
Спасибо. Всё работает!
Оставьте свое сообщение