Стандартные кодировки
В этом разделе описаны переменные, определяющие стандартную кодировку для определённых файлов или при выполнении определённых подпрограмм, а также функция, используемая операциями ввода-вывода для доступа к ним.
Эти переменные предназначены для однократной настройки стандартных кодировок, после чего они не должны изменяться. Для указания конкретной кодировки для конкретной операции в программе Lisp не следует изменять эти переменные; вместо этого переопределите их с помощью coding-system-for-read и coding-system-for-write (см. Указание кодировок).
- Параметр пользователя: auto-coding-regexp-alist
Эта переменная представляет собой список пар «текстовый шаблон — соответствующая кодировка». Каждый элемент имеет вид
(regexp . coding-system); файл, первые несколько килобайт которого соответствуют regexp, декодируется с помощью coding-system при чтении его содержимого в буфер. Параметры этого списка имеют приоритет над меткамиcoding:в файлах и содержимымfile-coding-system-alist(см. ниже). Значение по умолчанию настроено так, что Emacs автоматически распознаёт файлы почты в формате Babyl и считывает их без преобразования кодировок.
- Параметр пользователя: file-coding-system-alist
-
Эта переменная представляет собой список пар, определяющих кодировки для чтения и записи определённых файлов. Каждый элемент имеет вид
(pattern . coding), где pattern — регулярное выражение, соответствующее определённым именам файлов. Элемент применяется к именам файлов, соответствующим pattern.Список, начинающийся с элемента pattern, coding, должен содержать либо кодировку, либо пару кодировок, либо имя функции (символ с определением функции). Если coding — это кодировка, эта кодировка используется как для чтения файла, так и для его записи. Если coding — пара кодировок, то CAR указывает кодировку для декодирования, а CDR — для кодирования.
Если coding — имя функции, функция должна принимать один аргумент, список всех аргументов, переданных в
find-operation-coding-system. Она должна возвращать кодировку или пару кодировок. Это значение имеет то же значение, что и описано выше.Если coding (или возвращаемое значение функции) равно
undecided, выполняется стандартное распознавание кодировки.
- Параметр пользователя: auto-coding-alist
Эта переменная представляет собой список пар, определяющих кодировки для чтения и записи определённых файлов. Ее формат похож на формат
file-coding-system-alist, но в отличие от последнего, эта переменная имеет приоритет над любыми меткамиcoding:в файле.
- Переменная: process-coding-system-alist
Эта переменная представляет собой список пар, определяющих кодировки для дочерних процессов в зависимости от запускаемой программы. Она работает как
file-coding-system-alist, за исключением того, что pattern сопоставляется с именем программы, используемой для запуска дочернего процесса. Кодировка или кодировки, указанные в этом списке, используются для инициализации кодировок, используемых для ввода-вывода в дочерний процесс, но вы можете указать другие кодировки позже, используяset-process-coding-system.
Предупреждение: Кодировки, такие как undecided, которые определяют кодировку по данным, не работают надёжно с асинхронным выводом дочерних процессов. Это связано с тем, что Emacs обрабатывает асинхронный вывод дочерних процессов порциями по мере его получения. Если кодировка не указывает преобразование символов или преобразование окончания строки, Emacs должен пытаться определить правильное преобразование для каждой порции, и это не всегда работает.
Поэтому, при работе с асинхронным дочерним процессом, если это возможно, используйте кодировку, определяющую как преобразование кода символов, так и преобразование окончания строки — то есть такую, как latin-1-unix, а не undecided или latin-1.
- Переменная: network-coding-system-alist
Эта переменная представляет собой список пар, определяющих кодировку для сетевых потоков. Она работает аналогично
file-coding-system-alist, за исключением того, что pattern в элементе может быть либо номером порта, либо регулярным выражением. Если это регулярное выражение, оно сопоставляется с именем сетевой службы, используемой для открытия сетевого потока.
- Переменная: default-process-coding-system
-
Эта переменная задаёт кодировки, используемые для ввода-вывода дочерних процессов (и сетевых потоков), когда другие параметры не заданы.
Значение должно быть парой в виде
(input-coding . output-coding). Здесь input-coding относится к вводу из дочернего процесса, а output-coding — к выводу в него.
- Параметр пользователя: auto-coding-functions
-
Эта переменная содержит список функций, которые пытаются определить кодировку файла на основе его содержимого в необработанном виде.
Каждая функция в этом списке должна анализировать текст в текущем буфере, но никоим образом не должна его изменять. Буфер будет содержать текст частей файла. Каждая функция должна принимать один аргумент, size, который указывает, сколько символов просмотреть, начиная с текущей позиции. Если функция успешно определяет кодировку файла, она должна вернуть эту кодировку. В противном случае она должна вернуть
nil.Функции в этом списке могут вызываться при посещении файла, когда Emacs хочет декодировать его содержимое, и/или когда буфер файла собирается быть сохранённым, и Emacs хочет определить, как кодировать его содержимое.
Если файл имеет метку ‘coding:’, она имеет приоритет, поэтому эти функции не будут вызываться.
- Функция: find-auto-coding filename size
-
Эта функция пытается определить подходящую кодировку для filename. Она анализирует буфер, посещающий указанный файл, используя переменные, описанные выше последовательно, пока не найдёт соответствие одному из правил, заданных этими переменными. Затем она возвращает пару в виде
(coding . source), где coding — используемая кодировка, а source — символ, один изauto-coding-alist,auto-coding-regexp-alist,:coding, илиauto-coding-functions, указывающий, какая из них предоставила соответствующее правило. Значение:codingозначает, что кодировка была указана меткойcoding:в файле (см. метку кодировки в Справочном руководстве по GNU Emacs). Порядок поиска соответствующего правилаauto-coding-alistв первую очередь, затемauto-coding-regexp-alist, затем меткаcoding:и, наконец,auto-coding-functions. Если подходящее правило не найдено, функция возвращаетnil.Второй аргумент size — размер текста в символах, следующего за текущей позицией. Функция анализирует текст только в пределах size символов после текущей позиции. Обычно буфер должен быть помещён в начало, когда эта функция вызывается, потому что одно из мест для метки
coding:— это первые одна или две строки файла; в этом случае size должен быть размером буфера.
- Функция: set-auto-coding filename size
Эта функция возвращает подходящую кодировку для файла filename. Она использует
find-auto-codingдля поиска кодировки. Если кодировка не может быть определена, функция возвращаетnil. Значение аргумента size такое же, как вfind-auto-coding.
- Функция: find-operation-coding-system operation &rest arguments
-
Эта функция возвращает кодировку, которая должна быть использована (по умолчанию) для выполнения операции operation с arguments. Значение имеет следующий вид:
(decoding-system . encoding-system)
Первый элемент, decoding-system, — это кодировка, используемая для декодирования (если operation выполняет декодирование), а encoding-system — кодировка для кодирования (если operation выполняет кодирование).
Аргумент operation — символ; он должен быть одним из
write-region,start-process,call-process,call-process-region,insert-file-contents, илиopen-network-stream. Это имена примитивов ввода-вывода Emacs, которые могут выполнять преобразование кодировки символов и преобразование окончания строки.Остальные аргументы должны быть такими же аргументами, которые могут быть переданы соответствующему примитиву ввода-вывода. В зависимости от примитива, один из этих аргументов выбирается как целевой. Например, если operation выполняет ввод-вывод файлов, то тот аргумент, который указывает имя файла, является целевым. Для примитивов дочерних процессов целевым является имя процесса. Для
open-network-stream, целевым является имя службы или номер порта.В зависимости от operation, эта функция ищет целевой объект в
file-coding-system-alist,process-coding-system-alist, илиnetwork-coding-system-alist. Если целевой объект найден в списке пар,find-operation-coding-systemвозвращает его ассоциацию в списке; в противном случае возвращаетnil.Если operation равно
insert-file-contents, аргумент, соответствующий целевому объекту, может быть парой в виде(filename . buffer). В этом случае filename — это имя файла для поиска вfile-coding-system-alist, а buffer — буфер, содержащий содержимое файла (ещё не декодированное). Еслиfile-coding-system-alistуказывает функцию для вызова для этого файла, и эта функция должна проанализировать содержимое файла (как это обычно и делается), она должна проанализировать содержимое buffer вместо чтения файла.
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/Default-Coding-Systems.html