gifts2017

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

Опубликовал mc2 в раздел Программирование - Универсальные функции

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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

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

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

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

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

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

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

Возможно полезное дополнение. Батники не работают нормально по умолчанию с utf-8 поэтому первой строчкой можно поставить:
"chcp 65001" .
10. Сергей Смирнов (Serginio) 17.11.16 14:14
Функция Кодировка_UTF8_NoBOM()
    Возврат "CESU-8";
КонецФункции
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа