2012-06-18 20 views
6

पर अनुवाद करें, जहां तक ​​सी स्रोत खोज रहे हैं, लेकिन मुझे यह फ़ंक्शन नहीं मिल रहा है, और मैं वास्तव में खुद को लिखना नहीं चाहता क्योंकि यह बिल्कुल वहां होना चाहिए।यूनिकोड (यूटीएफ -8) कोडपॉइंट को बाइट्स

विस्तारित करने के लिए: यूनिकोड पॉइंट को यू + ######## के रूप में दर्शाया जाता है - यह मुझे प्राप्त करना आसान है, मुझे क्या चाहिए, यह प्रारूप एक फ़ाइल में लिखा गया प्रारूप है (उदाहरण के लिए)। एक यूनिकोड कोडपॉइंट बाइट्स में अनुवाद करता है जैसे कि सही बाइट के 7 बिट पहले बाइट में लिखे जाते हैं, फिर अगले बिट्स के 6 बिट अगले बाइट में लिखे जाते हैं और इसी तरह। Emacs निश्चित रूप से जानता है कि यह कैसे करना है, लेकिन बाइट्स के अनुक्रम के रूप में इसे यूटीएफ -8 एन्कोडेड स्ट्रिंग के बाइट अनुक्रम प्राप्त करने के लिए कोई रास्ता नहीं है (प्रत्येक में 8 बिट्स हैं)।

get-byte या multybite-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)))))))) 

उत्तर

5

encode-coding-string हो सकता है आप जो खोज रहे हैं:

*** Welcome to IELM *** Type (describe-mode) for help. 
ELISP> (encode-coding-string "eĥoŝanĝo ĉiuĵaŭde" 'utf-8) 
"e\304\245o\305\235an\304\235o \304\211iu\304\265a\305\255de" 

यह एक स्ट्रिंग देता है, लेकिन आप aref के साथ व्यक्तिगत बाइट्स तक पहुंच सकते हैं:

ELISP> (concatenate 'list (encode-coding-string "eĥoŝanĝo ĉiuĵaŭde" 'utf-8)) 
(101 196 165 111 197 157 97 110 196 157 111 32 196 137 105 117 196 181 97 197 173 100 101) 
:
ELISP> (aref (encode-coding-string "eĥoŝanĝo ĉiuĵaŭde" 'utf-8) 1) 
196 
ELISP> (format "%o" 196) 
"304" 

या यदि आप cl कार्यों का उपयोग कर कोई आपत्ति नहीं है, concatenate अपने दोस्त है

संबंधित मुद्दे