Преобразование кодовой точки Unicode (UTF-8) в байты

Я дошел до поиска исходников 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))))))))
6
задан 18 June 2012 в 15:50
поделиться