Я дошел до поиска исходников C, но я не могу найти эту функцию, и я действительно не хочу писать ее сам, потому что она обязательно должна быть там.
Чтобы уточнить: точки Unicode представлены как U+######## - это легко получить, мне нужен формат, в котором символ записывается в файл (например). Кодовая точка Unicode преобразуется в байты таким образом, что 7 бит самого правого байта записываются в первый байт, затем 6 битов следующих битов записываются в следующий байт и так далее. Emacs, конечно, знает, как это сделать, но я не могу найти способ получить из него последовательность байтов строки в кодировке UTF-8 в виде последовательности байтов (каждый из которых содержит 8 бит).
Такие функции, как get-byte
или multibite-char-to-unibyte
работают только с символами, которые могут быть представлены с использованием не более 8 бит. Мне нужно то же самое, что делает get-byte
, но для многобайтовых символов, чтобы вместо целого числа 0..256 я получал либо вектор целых чисел 0..256, либо одно длинное целое 0..2^32.
РЕДАКТИРОВАТЬ
На всякий случай, если это кому-то понадобится позже:
(defun haxe-string-to-x-string (s)
(with-output-to-string
(let (current parts)
(dotimes (i (length s))
(if (> 0 (multibyte-char-to-unibyte (aref s i)))
(progn
(setq current (encode-coding-string
(char-to-string (aref s i)) 'utf-8))
(dotimes (j (length current))
(princ (format "\\x%02x" (aref current j)))))
(princ (format "\\x%02x" (aref s i))))))))