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