41.9.3 Декодирование вывода процесса

Когда Emacs записывает вывод процесса непосредственно в многобайтовый буфер, он декодирует вывод в соответствии с системой кодирования вывода процесса. Если система кодирования — raw-text или no-conversion, Emacs преобразует однобайтовый вывод в многобайтовый с помощью string-to-multibyte и вставляет полученный многобайтовый текст.

Вы можете использовать set-process-coding-system, чтобы указать, какую систему кодирования использовать (см. Информация о процессе). В противном случае система кодирования берется из coding-system-for-read, если она не равна nil; или из механизма по умолчанию (см. Системы кодирования по умолчанию). Если текстовый вывод процесса содержит нулевые байты, Emacs по умолчанию использует no-conversion; см. inhibit-null-byte-detection, чтобы узнать, как контролировать это поведение.

Предупреждение: Системы кодирования, такие как undecided, которые определяют систему кодирования на основе данных, не работают полностью надежно с асинхронным выводом подпроцессов. Это связано с тем, что Emacs должен обрабатывать асинхронный вывод подпроцесса порциями, по мере его поступления. Emacs должен пытаться определить правильную систему кодирования для каждой порции, и это не всегда срабатывает. Поэтому, если это возможно, укажите систему кодирования, которая определяет как преобразование кодовой точки символа, так и преобразование конца строки — то есть, такую, как latin-1-unix, а не undecided или latin-1.

Когда Emacs вызывает функцию фильтрации процесса, он предоставляет вывод процесса как многобайтовую строку или как однобайтовую строку в соответствии с системой кодирования фильтра процесса. Emacs декодирует вывод в соответствии с системой кодирования вывода процесса, которая обычно создает многобайтовую строку, за исключением таких систем кодирования, как binary и raw-text.