Преобразование текстовых представлений
Emacs может преобразовывать текстовые данные с однобайтовым кодированием в многобайтовое; он также может преобразовывать многобайтовый текст в однобайтовый, при условии, что многобайтовый текст содержит только ASCII и 8-битные сырые байты. В целом, эти преобразования происходят при вставке текста в буфер или при объединении текста из нескольких строк в одну строку. Вы также можете явно преобразовать содержимое строки в одно из представлений.
Emacs выбирает представление для строки на основе текста, из которого она построена. Общее правило заключается в преобразовании однобайтового текста в многобайтовый текст при объединении его с другим многобайтовым текстом, поскольку многобайтовое представление является более универсальным и может содержать любые символы, имеющиеся в однобайтовом тексте.
При вставке текста в буфер Emacs преобразует текст в представление буфера, как указано в enable-multibyte-characters в этом буфере. В частности, при вставке многобайтового текста в однобайтовый буфер Emacs преобразует текст в однобайтовый, даже если это преобразование, как правило, не может сохранить все символы, которые могут быть в многобайтовом тексте. Другая естественная альтернатива — преобразовать содержимое буфера в многобайтовый формат — неприемлема, поскольку представление буфера — это выбор пользователя, который не может быть автоматически переопределен.
Преобразование однобайтового текста в многобайтовый текст оставляет ASCII-символы неизменными и преобразует байты с кодами от 128 до 255 в многобайтовое представление сырых восьмибитных байтов.
Преобразование многобайтового текста в однобайтовый преобразует все символы ASCII и восьмибитные символы в их однобайтовую форму, но теряет информацию о символах, не являющихся ASCII, отбрасывая все, кроме нижних 8 бит кода каждого символа.
Преобразование однобайтового текста в многобайтовый и обратно в однобайтовый воспроизводит исходный однобайтовый текст.
Следующие две функции либо возвращают аргумент string, либо новую строку без текстовых свойств.
- Функция: string-to-multibyte string
Эта функция возвращает многобайтовую строку, содержащую ту же последовательность символов, что и string. Если string — многобайтовая строка, она возвращается без изменений. Функция предполагает, что string содержит только символы ASCII и сырые 8-битные байты; последние преобразуются в их многобайтовое представление, соответствующее кодам
#x3FFF80по#x3FFFFF, включительно (см. коды символов).
- Функция: string-to-unibyte string
Эта функция возвращает однобайтовую строку, содержащую ту же последовательность символов, что и string. Если string — однобайтовая строка, она возвращается без изменений. В противном случае символы ASCII и символы в наборе
eight-bitпреобразуются в соответствующие значения байтов. Используйте эту функцию для аргументов string, которые содержат только символы ASCII и восьмибитные символы; функция сигнализирует об ошибке, если обнаруживаются другие символы.
- Функция: byte-to-string byte
-
Эта функция возвращает однобайтовую строку, содержащую один байт данных символа, byte. Она сигнализирует об ошибке, если byte не является целым числом от 0 до 255.
- Функция: multibyte-char-to-unibyte char
Преобразует многобайтовый символ char в однобайтовый символ и возвращает этот символ. Если char не является ASCII и не восьмибитным, функция возвращает -1.
- Функция: unibyte-char-to-multibyte char
Преобразует однобайтовый символ char в многобайтовый символ, предполагая, что char является либо символом ASCII, либо сырым 8-битным байтом.
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/Converting-Representations.html