Кодировка ОЕМ в методе "Записать" при формировании bat-файла
|
|
Max | Дата: Пн, 24.09.2018, 13:14:30 | Сообщение # 1 |
 Генерал-майор
Группа: Пользователи
Сообщений: 281
Репутация: 148
Статус: Оффлайн
| Винда Сервер 2016. Инструмент "Регистрация COM компонент". Нажимаю кнопку "Запустить от администратора" и вижу, что в сформированном самоудалящемся бат-файле вместо кириллицы (имя пользователя и путь к обработке ИР) знаки вопроса. Из-за этого сеанс не запускается. Исправил в методе "СоздатьСамоудаляющийсяКомандныйФайлЛкс" (ирОбщий) одну строку и все заработало. Было:Код ТекстовыйДокумент.Записать(ПолноеИмяФайла, КодировкаТекста.OEM);
Стало:Код ТекстовыйДокумент.Записать(ПолноеИмяФайла); // по умолчанию кодировка УТФ-8
В настройках ОС язык локали для неюникодовских программ установлен в значение "Русский". Патч реестра, подменяющий какие-то там странички cp1251.nls, который иногда помогает избавиться от знаков вопросов вместо кириллицы, в ОС не делал.
Сообщение отредактировал Max - Пн, 24.09.2018, 13:14:57 |
|
| |
tormozit | Дата: Пн, 24.09.2018, 23:33:42 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6947
Репутация: 184
Статус: Онлайн
| А если так? ТекстовыйДокумент.Записать(ПолноеИмяФайла, КодировкаТекста.ANSI);
|
|
| |
Max | Дата: Вт, 25.09.2018, 07:58:42 | Сообщение # 3 |
 Генерал-майор
Группа: Пользователи
Сообщений: 281
Репутация: 148
Статус: Оффлайн
| Записанный с кодировкой АНСИ и открытый после этого в "Блокноте" бат-файл корректен (кириллица отображается как ожидается), но 1С видит вместо этого "крякозябры": http://pics.rsh.ru/img/Untitled_magpmima.png

И это не первый случай, когда 1С в Винде не понимает кодировку, отличную от УТФ-8: был еще один похожий с обработкой универсального обмена ХМЛ (которая использует запись файлов обмена в кодировке АНСИ).
|
|
| |
tormozit | Дата: Вс, 30.09.2018, 22:37:13 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 6947
Репутация: 184
Статус: Онлайн
| Исправлено в 4.67
|
|
| |
Max | Дата: Пн, 01.10.2018, 10:04:25 | Сообщение # 5 |
 Генерал-майор
Группа: Пользователи
Сообщений: 281
Репутация: 148
Статус: Оффлайн
| Исправлено, да не совсем, как оказалось. Выдернул созданный бат-файлик, запускаю его отдельно в командной строке и вот что получается: http://pics.rsh.ru/img/Untitled_usarzto5.png

Команда "cmd" даже не начинает выполняться. Подчеркнутое красным "я╗┐" - это BOM (byte order mark) и, судя по всему, текстовый UTF8-файл надо сохранять без него. Проблема в том, что объектами "ТекстовыйДокумент" или "ЗаписьТекста" этого добиться, похоже, можно только в паре с объектом "Поток" (8.3.9.1818+). Но ведь у тебя используется метод "Run" внешней компоненты - может, в ней этот BOM удалять?
Сообщение отредактировал Max - Пн, 01.10.2018, 10:06:28 |
|
| |
gda | Дата: Ср, 03.10.2018, 15:43:50 | Сообщение # 6 |
Лейтенант
Группа: Проверенные
Сообщений: 65
Репутация: 78
Статус: Оффлайн
| В комментарии к статье https://infostart.ru/public/137454/ предлагается использовать кодировку CESU-8 вместо UTF-8.
|
|
| |
smerch | Дата: Пн, 08.10.2018, 15:34:58 | Сообщение # 7 |
Сержант
Группа: Пользователи
Сообщений: 24
Репутация: 14
Статус: Оффлайн
| Подтверждаю, кодировка CESU-8 работает.
Есть только один нюанс: для того, чтобы параметры передавались верно необходимо установить кодировку 65001 перед запуском команды.
Т.е. в обработке ирПлатформа.epf в процедуре ЗапуститьСкрытоеПриложениеИДождатьсяЗавершения добавить вначале строки запуска Код СтрокаЗапуска = "chcp 65001" + Символы.ПС + "cmd.exe /c """ + СтрокаЗапуска + """";
Сообщение отредактировал smerch - Пн, 08.10.2018, 17:11:24 |
|
| |