Преобразование кодовых точек символов включает преобразование между внутренним представлением символов, используемым внутри Emacs, и какой-либо другой кодировкой. Emacs поддерживает множество различных кодировок, поскольку он может преобразовывать данные в них и из них. Например, он может преобразовывать текст в кодировки, такие как Latin 1, Latin 2, Latin 3, Latin 4, Latin 5, и несколько вариантов ISO 2022. В некоторых случаях Emacs поддерживает несколько альтернативных кодировок для одних и тех же символов; например, для кириллицы (русского) алфавита существует три системы кодирования: ISO, Alternativnyj и KOI8.
Каждая система кодирования определяет определенный набор преобразований кодовых точек символов, но система кодирования undecided является особенной: она оставляет выбор неопределенным, чтобы он был выбран эвристически для каждого файла или строки на основе данных файла или строки при их декодировании или кодировании. Система кодирования prefer-utf-8 похожа на undecided, но она отдает предпочтение выбору utf-8, когда это возможно.
В общем случае система кодирования не гарантирует идентичности при обратном преобразовании: декодирование последовательности байтов с использованием системы кодирования, а затем кодирование полученного текста в той же системе кодирования может привести к другой последовательности байтов. Но некоторые системы кодирования гарантируют, что последовательность байтов будет такой же, как та, которую вы изначально декодировали. Вот несколько примеров:
iso-8859-1, utf-8, big5, shift_jis, euc-jp
Кодирование текста буфера, а затем декодирование результата также может не воспроизвести исходный текст. Например, если вы кодируете символ с помощью системы кодирования, которая не поддерживает этот символ, результат непредсказуем, и, следовательно, декодирование его с использованием той же системы кодирования может привести к другому тексту. В настоящее время Emacs не может сообщать об ошибках, возникающих в результате кодирования неподдерживаемых символов.
Преобразование конца строки обрабатывает три различные конвенции, используемые на различных системах для представления конца строки в файлах. Конвенция Unix, используемая в системах GNU и Unix, а также в macOS, заключается в использовании символа перевода строки (также называемого новой строкой). Конвенция DOS, используемая в системах MS-Windows и MS-DOS, заключается в использовании возврата каретки и перевода строки. Конвенция Mac, используемая в Classic Mac OS и теперь редко встречающаяся за пределами устаревшего программного обеспечения, заключается в использовании только возврата каретки.
Базовые системы кодирования, такие как latin-1, оставляют преобразование конца строки неопределенным, чтобы оно было выбрано на основе данных. Вариантные системы кодирования, такие как latin-1-unix, latin-1-dos и latin-1-mac, также явно указывают преобразование конца строки. Большинство базовых систем кодирования имеют три соответствующих варианта, названия которых формируются путем добавления «-unix», «-dos» и «-mac».
Система кодирования raw-text особенна тем, что она предотвращает преобразование кодовых точек символов и заставляет буфер, просматриваемый с использованием этой системы кодирования, быть однобайтовым буфером. По историческим причинам вы можете сохранять как однобайтовый, так и многобайтовый текст с использованием этой системы кодирования. Когда вы используете raw-text для кодирования многобайтового текста, он выполняет одно преобразование кодовых точек символов: он преобразует восьмибитные символы в их внешнее однобайтовое представление. raw-text не указывает преобразование конца строки, позволяя, чтобы оно определялось обычным образом на основе данных, и имеет обычные три варианта, которые указывают преобразование конца строки.
no-conversion (и его псевдоним binary) эквивалентен raw-text-unix: он не указывает ни преобразования кодовых точек символов, ни преобразования конца строки.
Система кодирования utf-8-emacs указывает, что данные представлены во внутренней кодировке Emacs (см. Представления текста). Это похоже на raw-text тем, что не происходит преобразования кодов, но отличается тем, что результат представляет собой многобайтовые данные. Имя emacs-internal является псевдонимом для utf-8-emacs-unix (поэтому оно принудительно не выполняет преобразование конца строки, в отличие от utf-8-emacs, который может декодировать все 3 типа конвенций конца строки). Поскольку эта система кодирования может представлять все символы, поддерживаемые Emacs в его буферах и строках, мы рекомендуем использовать ее при сохранении текста для внутренних целей, таких как кэширование.
Эта функция возвращает указанное свойство системы кодирования coding-system. Большинство свойств системы кодирования существуют для внутренних целей, но одним, который может оказаться полезным, является :mime-charset. Значение этого свойства — это имя, используемое в MIME для кодирования символов, которое может считывать и записывать эта система кодирования. Примеры:
(coding-system-get 'iso-latin-1 :mime-charset)
⇒ iso-8859-1
(coding-system-get 'iso-2022-cn :mime-charset)
⇒ iso-2022-cn
(coding-system-get 'cyrillic-koi8 :mime-charset)
⇒ koi8-r
Значение свойства :mime-charset также определяется как псевдоним для системы кодирования.
Эта функция возвращает список псевдонимов для coding-system.