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

06.02.14

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

BOM

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4451    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    8236    DeerCven    15    

62

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    54957    dimanich70    84    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    7855    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    69629    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    9827    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 216 06.02.14 16:16 Сейчас в теме
2. WKBAPKA 216 06.02.14 16:17 Сейчас в теме
ставлю минус за оформление публикации
baracuda; artichoke; +2 2 Ответить
3. pavel_pss 291 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.: Пользователи любых других национальных языков просто в восторге, от такого фигового решения.
user1878860; CodeNull; +2 4 Ответить
5. mc2 22 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.: это интернет, могут и послать.
user1878860; Orlando Skibraves; baracuda; CodeNull; kinazarov; +5 1 Ответить
7. mc2 22 12.02.14 23:16 Сейчас в теме
(6) pumbaE, 1. В моем алгоритме НЕТ вообще нет преобразований кодировок! Прочитайте документацию по языку программирования 1С. Суть алгоритма в том, что сначала создается пустой файл в кодировке ANSI, который не содержит ВОМ, а затем к нему дописываются данные в кодировке UTF-8. Это происходит без каких-либо преобразований. Естественно, при дописывании данных ВОМ не пишется.

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

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

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

Возможно полезное дополнение. Батники не работают нормально по умолчанию с utf-8 поэтому первой строчкой можно поставить:
"chcp 65001" .
10. Serginio 945 17.11.16 14:14 Сейчас в теме
Функция Кодировка_UTF8_NoBOM()
    Возврат "CESU-8";
КонецФункции
SergMuravev; DJ_Codebase; begemot; MaZaHacKa_13; Tria; Andreynikus; Lapitskiy; officeRebot; madgahed; uno-c; Vostr; artkor; spectre1978; echo77; user743891; METAL; RomanMartynenko; master555; Gureev; ditp; +20 Ответить
11. Gerts 12 01.08.17 05:02 Сейчас в теме
С одной стороны: Описание не подробно.
С другой: "Краткость - сестра таланта".
Подробно было бы интересно новичкам, а многим суть понятна и так.
Я ставлю "+".
Написано по сути, работает. Большего не надо.
ElStar; Dmitryiv; simuljakr; artichoke; +4 Ответить
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>)
Orlando Skibraves; mc2; Seneka7608; METAL; +4 Ответить
17. uno-c 272 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 6 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 166 08.02.24 19:11 Сейчас в теме
Спасибо. Всё работает!
25. nature2002 14 20.12.24 19:11 Сейчас в теме
не работает, получается ANSI
26. SergMuravev 882 03.01.26 20:27 Сейчас в теме
Повторю лучшее решение:

Функция Кодировка_UTF8_NoBOM()
    Возврат "CESU-8";
КонецФункции

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, Кодировка_UTF8_NoBOM());
Для отправки сообщения требуется регистрация/авторизация