Запись текста в кодировке UTF-8 без BOM средствами платформы 1С (без "извращений")
Собствено говоря это решение мной уже было опубликовано в виде коментария к статье //infostart.ru/public/137454/
Но вчера я получил в личку письмо, из которого следует, что оно достойно отдельной публикации.
Вот собственно говоря само решение:
ЗТ = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
ЗТ.Закрыть();
ЗТ = Новый ЗаписьТекста(ИмяФайла,,, Истина, Символы.ПС);
ЗТ.Записать(Данные);
ЗТ.Закрыть();
What the hell?
ставлю минус за оформление публикации
(2) WKBAPKA,
Не нравится оформление публикации не смотри.
(4) pumbaE, Если Вы не понимаете о чем идет речь, то нечего умничать. Для таких непонятливых поясняю: есть задача записать файл в кодировке UTF-8 без BOM, т.к. он не всегда корректно распознается сторонними приложениями, например, при передаче POST-запроса через HTTP-соединение. Приведенный алгоритм это делает наиболее простым способом. Если вам известен более простой способ, то лучше его опубликовать, чем вводить в заблуждение других людей.
Для совсем непонятливых: ВОМ это 3 символа, которые добавляются в начало файла для автоматического определения кодировки.
P.S. «Тыкать» можете своим друзьям, а здесь этого не надо делать.
(5) повторяю таблица кодировки UTF-8 содержит больше символов чем ANSI, поэтому преобразование к ANSI может не только убрать первые 3 байта, но и испортить содержание документа. В той же публикации более элегантное решениеhttp://forum.infostart.ru/forum24/topic62033/message707087/#message707087
p.s.: это интернет, могут и послать.
(6) pumbaE, 1. В моем алгоритме НЕТ вообще нет преобразований кодировок! Прочитайте документацию по языку программирования 1С. Суть алгоритма в том, что сначала создается пустой файл в кодировке ANSI, который не содержит ВОМ, а затем к нему дописываются данные в кодировке UTF-8. Это происходит без каких-либо преобразований. Естественно, при дописывании данных ВОМ не пишется.
2. Это реально работает, сам давно использую. Прежде чем писать всякую чушь, надо было хотя бы разобраться или проверить.
3. Алгоритм с отрезанием ВОМ однозначно является более громоздким и ресурсоемким.
P.S. Насчет «послать» — это все-таки модерируемый технический форум, за это могут и «забанить», т.ч. стоит это учитывать при выборе стиля общения…
А для 7.7 пример?
Спасибо! Помогло!
Возможно полезное дополнение. Батники не работают нормально по умолчанию с utf-8 поэтому первой строчкой можно поставить:
«chcp 65001» .
С одной стороны: Описание не подробно.
С другой: «Краткость — сестра таланта».
Подробно было бы интересно новичкам, а многим суть понятна и так.
Я ставлю «+».
Написано по сути, работает. Большего не надо.
CESU-8 сначала хотели назвать UTF-8S, но потом переименовали в CESU-8, чтобы не думали, что это UTF-8.
Короче, эта кодировка не во всем является UTF-8, т.к. ее целью было облегчить UTF-16.
Так что правильнее отрезать BOM от файла.
В 8.3 в ЗаписьXML в функции ОткрытьФайл есть 3-й параметр:
ОткрытьФайл(<ИмяФайлаXML>, <ТипКодировки>, <ДобавлятьBOM>)
Благодарю! Коротко, ясно, легко встраивается в код и работает 😉
Огромное спасибо! Нашел ответ который искал очень давно!