Указание кодировки для одной операции
Вы можете указать кодировку для конкретной операции, связав переменные coding-system-for-read и/или coding-system-for-write.
- Переменная: coding-system-for-read
-
Если эта переменная не
nil, она указывает кодировку, которую следует использовать для чтения файла или для ввода из синхронного подпроцесса.Она также применяется к любым асинхронным подпроцессам или сетевым потокам, но по-другому: значение
coding-system-for-readпри запуске подпроцесса или открытии сетевого потока указывает метод декодирования ввода для этого подпроцесса или сетевого потока. Оно остается в использовании для этого подпроцесса или сетевого потока до тех пор, пока не будет переопределено.Правильный способ использования этой переменной — связать ее с
letдля конкретной операции ввода-вывода. Ее глобальное значение обычноnil, и вы не должны глобально устанавливать ей другое значение. Вот пример правильного использования этой переменной:;; Read the file with no character code conversion. (let ((coding-system-for-read 'no-conversion)) (insert-file-contents filename))Когда ее значение не
nil, эта переменная имеет приоритет над всеми другими способами указания кодировки для ввода, включаяfile-coding-system-alist,process-coding-system-alistиnetwork-coding-system-alist.
- Переменная: coding-system-for-write
-
Это работает очень похоже на
coding-system-for-read, за исключением того, что оно применяется к выводу, а не к вводу. Оно влияет на запись в файлы, а также на отправку вывода в подпроцессы и сетевые подключения. Оно также применяется к кодированию аргументов командной строки, с помощью которых Emacs вызывает подпроцессы.Когда одна операция выполняет как ввод, так и вывод, как
call-process-regionиstart-process, на нее влияют какcoding-system-for-read, так иcoding-system-for-write.
- Переменная: coding-system-require-warning
Связывание
coding-system-for-writeс ненулевым значением предотвращает вызов функции, указаннойselect-safe-coding-system-function, в примитивах вывода (см. Выбор кодировки пользователем). Это связано с тем, что C-x RET c (universal-coding-system-argument) работает путем связыванияcoding-system-for-write, и Emacs должен подчиняться выбору пользователя. Если программа Lisp связываетcoding-system-for-writeсо значением, которое может быть небезопасным для кодирования текста, подлежащего записи, она также может связатьcoding-system-require-warningс ненулевым значением, что заставит примитивы вывода проверить кодировку, вызвав значениеselect-safe-coding-system-function, даже еслиcoding-system-for-writeимеет ненулевое значение. В качестве альтернативы, явно вызовитеselect-safe-coding-systemперед использованием указанной кодировки.
- Пользовательский параметр: inhibit-eol-conversion
Когда эта переменная имеет ненулевое значение, преобразование конца строки не выполняется, независимо от указанной кодировки. Это относится ко всем примитивам ввода-вывода Emacs и подпроцессам, а также к явным функциям кодирования и декодирования (см. Явное кодирование).
Иногда необходимо указать несколько кодировок для некоторой операции, а не фиксировать одну. Emacs позволяет указать порядок приоритета кодировок. Этот порядок влияет на сортировку списков кодировок, возвращаемых функциями, такими как find-coding-systems-region (см. Lisp и кодировки).
- Функция: coding-system-priority-list &optional highestp
Эта функция возвращает список кодировок в порядке их текущего приоритета. Необязательный аргумент highestp, если он не
nil, означает возвращение только кодировки с наивысшим приоритетом.
- Функция: set-coding-system-priority &rest coding-systems
Эта функция помещает coding-systems в начало списка приоритетов кодировок, тем самым повысив их приоритет по сравнению со всеми остальными.
- Макрос: with-coding-priority coding-systems &rest body
Этот макрос выполняет body, как и
progn(см. progn), с coding-systems в начале списка приоритетов кодировок. coding-systems должен быть списком кодировок, которые следует предпочесть во время выполнения body.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Specifying-Coding-Systems.html