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

Публикация № 253878

Программирование - Универсальные функции

BOM

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

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

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

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

12

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. WKBAPKA 212 06.02.14 16:16 Сейчас в теме
2. WKBAPKA 212 06.02.14 16:17 Сейчас в теме
ставлю минус за оформление публикации
3. pavel_pss 242 11.02.14 18:26 Сейчас в теме
(2) WKBAPKA,
Не нравится оформление публикации не смотри.
4. pumbaE 627 12.02.14 10:29 Сейчас в теме
Ты точно utf с ansi не попутал? минус заслуженный, лучше бы решение с base64 привел.

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

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

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

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

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

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

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

Возможно полезное дополнение. Батники не работают нормально по умолчанию с utf-8 поэтому первой строчкой можно поставить:
"chcp 65001" .
10. Serginio 798 17.11.16 14:14 Сейчас в теме
Функция Кодировка_UTF8_NoBOM()
    Возврат "CESU-8";
КонецФункции
spectre1978; echo77; user743891; METAL; Rego1337h; master555; Gureev; ditp; +8 Ответить
11. Gerts 12 01.08.17 05:02 Сейчас в теме
С одной стороны: Описание не подробно.
С другой: "Краткость - сестра таланта".
Подробно было бы интересно новичкам, а многим суть понятна и так.
Я ставлю "+".
Написано по сути, работает. Большего не надо.
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>)
13. Casey1984 3 26.07.18 12:20 Сейчас в теме
Благодарю! Коротко, ясно, легко встраивается в код и работает ;-)
14. violencethepepper 16.04.19 10:22 Сейчас в теме
Огромное спасибо! Нашел ответ который искал очень давно!
Оставьте свое сообщение