Кодирование и Ввод/Вывод
Основное назначение систем кодирования — использование при чтении и записи файлов. Функция insert-file-contents использует систему кодирования для декодирования данных файла, а write-region — для кодирования содержимого буфера.
Вы можете указать используемую систему кодирования явно (см. Указание систем кодирования) или неявно, используя механизм по умолчанию (см. Системы кодирования по умолчанию). Но эти методы могут не полностью определить, что делать. Например, они могут выбрать систему кодирования, такую как undecided, которая оставляет преобразование кодов символов для определения из данных. В этих случаях операция ввода/вывода завершает выбор системы кодирования. Очень часто вам потребуется узнать, какая система кодирования была выбрана.
- Переменная: buffer-file-coding-system
-
Эта локальная переменная буфера записывает систему кодирования, используемую для сохранения буфера и для записи части буфера с помощью
write-region. Если текст, который нужно записать, нельзя безопасно закодировать, используя систему кодирования, указанную в этой переменной, эти операции выбирают альтернативное кодирование, вызывая функциюselect-safe-coding-system(см. Системы кодирования, выбранные пользователем). Если для выбора другого кодирования необходимо попросить пользователя указать систему кодирования,buffer-file-coding-systemобновляется до новой выбранной системы кодирования.buffer-file-coding-systemне влияет на отправку текста в дочерний процесс.
- Переменная: save-buffer-coding-system
-
Эта переменная задаёт систему кодирования для сохранения буфера (путём переопределения
buffer-file-coding-system). Обратите внимание, что она не используется дляwrite-region.Когда команда сохранения буфера начинает использовать
buffer-file-coding-system(илиsave-buffer-coding-system), и эта система кодирования не может обработать фактический текст в буфере, команда просит пользователя выбрать другую систему кодирования (вызваниемselect-safe-coding-system). После этого команда также обновляетbuffer-file-coding-system, чтобы отразить систему кодирования, указанную пользователем.
- Переменная: last-coding-system-used
-
Операции ввода/вывода для файлов и дочерних процессов устанавливают эту переменную в имя системы кодирования, которое было использовано. Явные функции кодирования и декодирования (см. Явное кодирование) также устанавливают её.
Предупреждение: Поскольку получение выходных данных дочернего процесса устанавливает эту переменную, она может изменяться всякий раз, когда Emacs ждёт; поэтому вы должны скопировать значение вскоре после вызова функции, которая сохраняет значение, которое вас интересует.
Переменная selection-coding-system определяет способ кодирования выделений для системного окна. См. Выделения системного окна.
- Переменная: file-name-coding-system
Переменная
file-name-coding-systemзадаёт систему кодирования, используемую для кодирования имён файлов. Emacs кодирует имена файлов с помощью этой системы кодирования для всех операций с файлами. Еслиfile-name-coding-systemимеет значениеnil, Emacs использует систему кодирования по умолчанию, определяемую выбранной языковой средой. В стандартной языковой среде любые символы, не являющиеся ASCII, в именах файлов не кодируются специально; они отображаются в файловой системе с использованием внутренней внутренней кодировки Emacs.
Предупреждение: если вы измените file-name-coding-system (или языковую среду) в процессе сеанса Emacs, могут возникнуть проблемы, если вы уже посещали файлы, имена которых были закодированы с использованием более ранней системы кодирования и обрабатываются по-разному в новой системе кодирования. Если вы попытаетесь сохранить один из этих буферов под именем посещённого файла, сохранение может использовать неверное имя файла или получить ошибку. Если такая проблема возникнет, используйте C-x C-w, чтобы указать новое имя файла для этого буфера.
В Windows 2000 и более поздних версиях Emacs по умолчанию использует API Unicode для передачи имён файлов операционной системе, поэтому значение file-name-coding-system в значительной степени игнорируется. Приложения Lisp, которым необходимо кодировать или декодировать имена файлов на уровне Lisp, должны использовать систему кодирования utf-8, когда system-type имеет значение windows-nt; преобразование кодированных UTF-8 имён файлов в кодировку, соответствующую взаимодействию с операционной системой, выполняется внутри Emacs.
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/Encoding-and-I_002fO.html