Poszedłem aż do wyszukiwania źródeł C, ale nie mogę znaleźć tej funkcji, a ja naprawdę nie chcę napisać samemu, ponieważ to absolutnie musi tam być.Przetłumacz kod kodowy Unicode (UTF-8) na bajty
Aby opracować: punkty Unicode są reprezentowane jako U + ######## - jest to łatwe do zdobycia, to, czego potrzebuję, to format, w jakim znak jest zapisywany do pliku (na przykład). Punkt kodowy Unicode tłumaczy się na bajty tak, że 7 bitów bajtu po prawej stronie jest zapisanych w pierwszym bajcie, a następnie 6 bitów kolejnych bitów jest zapisywane w następnym bajcie i tak dalej. Emacs z pewnością wie, jak to zrobić, ale nie ma sposobu, aby znaleźć ciąg bajtowy kodowanego w UTF-8 łańcucha od niego jako sekwencji bajtów (z których każda zawiera 8 bitów).
funkcje takie jak get-byte
lub multybite-char-to-unibyte
pracy tylko z postaci, które mogą być reprezentowane przy użyciu nie więcej niż 8 bitów. Potrzebuję tego samego, co robi get-byte
, ale dla znaków wielobajtowych, tak że zamiast liczby całkowitej 0..256 otrzymam wektor liczb całkowitych 0..256 lub jedną długą liczbę całkowitą 0..2^32.
EDIT
Tylko w przypadku, ktoś będzie musiał to później:
(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))))))))