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

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

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

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

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

13 Comments

  1. WKBAPKA

    What the hell?

    Reply
  2. WKBAPKA

    ставлю минус за оформление публикации

    Reply
  3. pavel_pss

    (2) WKBAPKA,

    Не нравится оформление публикации не смотри.

    Reply
  4. mc2

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

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

    P.S. «Тыкать» можете своим друзьям, а здесь этого не надо делать.

    Reply
  5. pumbaE

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

    p.s.: это интернет, могут и послать.

    Reply
  6. mc2

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

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

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

    P.S. Насчет «послать» — это все-таки модерируемый технический форум, за это могут и «забанить», т.ч. стоит это учитывать при выборе стиля общения…

    Reply
  7. Hexed

    А для 7.7 пример?

    Reply
  8. 1ckorolev

    Спасибо! Помогло!

    Возможно полезное дополнение. Батники не работают нормально по умолчанию с utf-8 поэтому первой строчкой можно поставить:

    «chcp 65001» .

    Reply
  9. Serginio
    Функция Кодировка_UTF8_NoBOM()
    Возврат «CESU-8»;
    КонецФункции
    Reply
  10. Gerts

    С одной стороны: Описание не подробно.

    С другой: «Краткость — сестра таланта».

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

    Я ставлю «+».

    Написано по сути, работает. Большего не надо.

    Reply
  11. ilyay

    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>)

    Reply
  12. Casey1984

    Благодарю! Коротко, ясно, легко встраивается в код и работает 😉

    Reply
  13. violencethepepper

    Огромное спасибо! Нашел ответ который искал очень давно!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *