34.10.3 Кодировки в Lisp

Ниже приведены средства Lisp для работы с кодировками:

Функция: coding-system-list &optional base-only

Эта функция возвращает список всех имён кодировок (символов). Если base-only не равен nil, значение включает только базовые кодировки. В противном случае оно включает также псевдонимы и варианты кодировок.

Функция: coding-system-p object

Эта функция возвращает t, если object является именем кодировки, и nil в противном случае.

Функция: check-coding-system coding-system

Эта функция проверяет корректность coding-system. Если он корректен, она возвращает coding-system. Если coding-system равен nil, функция возвращает nil. Для любых других значений она выдаёт ошибку, чей error-symbol равен coding-system-error (см. signal).

Функция: coding-system-eol-type coding-system

Эта функция возвращает тип преобразования конца строки (т. н. eol), используемый coding-system. Если coding-system задаёт определённое преобразование eol, возвращаемое значение — целое число 0, 1 или 2, обозначающее соответственно unix, dos и mac. Если coding-system явно не задаёт преобразование eol, возвращается вектор кодировок, каждая из которых имеет один из возможных типов преобразования eol, например:

(coding-system-eol-type 'latin-1)
     ⇒ [latin-1-unix latin-1-dos latin-1-mac]

Если эта функция возвращает вектор, Emacs сам решает, какое преобразование eol использовать в процессе кодирования или декодирования текста. При декодировании формат конца строки в тексте определяется автоматически, и преобразование eol устанавливается соответствующим (например, формат DOS CRLF подразумевает преобразование dos). При кодировании преобразование eol берётся из соответствующей кодировки по умолчанию (например, значение по умолчанию buffer-file-coding-system для buffer-file-coding-system) или из преобразования eol, принятого для данной платформы.

Функция: coding-system-change-eol-conversion coding-system eol-type

Эта функция возвращает кодировку, аналогичную coding-system, но с преобразованием eol, задаваемым параметром eol-type. eol-type должен быть unix, dos, mac или nil. Если он равен nil, возвращаемая кодировка определяет преобразование конца строки по данным.

eol-type также может быть равен 0, 1 или 2, что соответствует unix, dos и mac соответственно.

Функция: coding-system-change-text-conversion eol-coding text-coding

Эта функция возвращает кодировку, которая использует преобразование конца строки из eol-coding и текстовое преобразование из text-coding. Если text-coding равен nil, она возвращает undecided или один из его вариантов в соответствии с eol-coding.

Функция: find-coding-systems-region from to

Эта функция возвращает список кодировок, которые можно использовать для кодирования текста между from и to. Все кодировки в списке могут безопасно кодировать любые многобайтовые символы в этой части текста.

Если текст не содержит многобайтовых символов, функция возвращает список (undecided).

Функция: find-coding-systems-string string

Эта функция возвращает список кодировок, которые можно использовать для кодирования текста string. Все кодировки в списке могут безопасно кодировать любые многобайтовые символы в string. Если текст не содержит многобайтовых символов, возвращается список (undecided).

Функция: find-coding-systems-for-charsets charsets

Эта функция возвращает список кодировок, которые можно использовать для кодирования всех наборов символов из списка charsets.

Функция: check-coding-systems-region start end coding-system-list

Эта функция проверяет, могут ли кодировки из списка coding-system-list закодировать все символы в области между start и end. Если все кодировки из списка могут закодировать указанный текст, функция возвращает nil. Если некоторые кодировки не могут закодировать некоторые символы, возвращается ассоциативный список, каждый элемент которого имеет вид (coding-system1 pos1 pos2 …), означающий, что coding-system1 не может закодировать символы в позициях буфера pos1, pos2, ....

start может быть строкой; в этом случае end игнорируется, а возвращаемое значение ссылается на индексы строки, а не на позиции буфера.

Функция: detect-coding-region start end &optional highest

Эта функция выбирает вероятную кодировку для декодирования текста от start до end. Этот текст должен быть байтовой последовательностью, т. е. однобайтовым текстом или многобайтовым текстом, содержащим только ASCII и восьмибитные символы (см. Явное кодирование и декодирование).

Обычно эта функция возвращает список кодировок, которые могут обработать декодирование просмотренного текста. Они перечислены в порядке убывания приоритета. Но если highest не равен nil, возвращается только одна кодировка — с наивысшим приоритетом.

Если область содержит только символы ASCII, за исключением управляющих символов ISO-2022, таких как ESC, значением будет undecided или (undecided), либо вариант, задающий преобразование конца строки, если его можно определить по тексту.

Если область содержит нулевые байты, возвращается no-conversion, даже если область содержит текст, закодированный в какой-либо кодировке.

Функция: detect-coding-string string &optional highest

Эта функция аналогична detect-coding-region, но работает с содержимым string, а не с байтами в буфере.

Переменная: inhibit-null-byte-detection

Если значение этой переменной не равно nil, нулевые байты игнорируются при определении кодировки области или строки. Это позволяет корректно определять кодировку текста, содержащего нулевые байты, например, Info-файлов с индексными узлами.

Переменная: inhibit-iso-escape-detection

Если значение этой переменной не равно nil, управляющие последовательности ISO-2022 игнорируются при определении кодировки области или строки. В результате ни один текст никогда не будет определён как закодированный в какой-либо кодировке ISO-2022, и все управляющие последовательности становятся видимыми в буфере. Предупреждение: Используйте эту переменную с крайней осторожностью, поскольку многие файлы в дистрибутиве Emacs используют кодировку ISO-2022.

Функция: coding-system-charset-list coding-system

Эта функция возвращает список наборов символов (см. Наборы символов), поддерживаемых coding-system. Некоторые кодировки, поддерживающие слишком много наборов для перечисления, возвращают специальные значения:

  • Если coding-system поддерживает все символы Emacs, значением является (emacs).
  • Если coding-system поддерживает все символы Unicode, значением является (unicode).
  • Если coding-system поддерживает все наборы ISO-2022, значением является iso-2022.
  • Если coding-system поддерживает все символы внутренней кодировки, использовавшейся в Emacs версии 21 (до реализации поддержки Unicode), значением является emacs-mule.

См. Информация о процессе, в частности описание функций process-coding-system и set-process-coding-system, о том, как просматривать или устанавливать кодировки, используемые для ввода-вывода в дочерний процесс.