2011-10-15 13 views
9

मैं निम्नलिखित अजगर मूल्य की आवश्यकता है में एक unichar प्रतिनिधित्व करने के लिए क्या है '0':रास्ता, यूनिकोड वर्ण lua

>>> unichr(0) 
u'\x00' 

मैं इसे कैसे लुआ में परिभाषित कर सकते हैं?

उत्तर

5

कैसे

function unichr(ord) 
    if ord == nil then return nil end 
    if ord < 32 then return string.format('\\x%02x', ord) end 
    if ord < 126 then return string.char(ord) end 
    if ord < 65539 then return string.format("\\u%04x", ord) end 
    if ord < 1114111 then return string.format("\\u%08x", ord) end 
end 
+0

मुझे समझ में नहीं आता कि यह आपके अपने प्रश्न का उत्तर कैसे देता है। क्या आप वास्तव में सिर्फ एक हेक्साडेसिमल संख्या को इसके सामने '\ u' के साथ प्रारूपित करने के लिए कह रहे थे? –

+0

प्रश्न का शीर्षक - "लूआ में एक अनइचर * का प्रतिनिधित्व करने का तरीका क्या है" - असल में मुझे लूआ फ़ंक्शन की आवश्यकता होती है जो बराबर पाइथन स्क्रिप्ट के समान होती है क्योंकि एक दूसरे को बदलने के लिए आती है। जाहिर है, यह बस पर्याप्त है। –

10

कोई नहीं है।

लुआ में यूनिकोड मूल्य की कोई अवधारणा नहीं है। लुआ में यूनिकोड की सभी अवधारणाओं की कोई अवधारणा नहीं है पर। सभी लुआ स्ट्रिंग्स "अक्षर" के 8-बिट अनुक्रम हैं, और सभी लुआ स्ट्रिंग फ़ंक्शंस उन्हें इस तरह से इलाज करेंगे। लुआ स्ट्रिंग्स का इलाज किसी यूनिकोड एन्कोडिंग के रूप में नहीं करता है; वे बाइट्स का सिर्फ एक अनुक्रम हैं।

आप एक स्ट्रिंग में एक मनमाना संख्या डाल सकते हैं। उदाहरण के लिए:

"\065\066" 

बराबर है करने के लिए:

"AB" 

\ अंकन 3 अंक (या भागने पात्रों में से एक) है, जो 255 से कम या उसके बराबर होना चाहिए द्वारा पीछा किया जाता है लुआ एम्बेडेड \000 वर्णों के साथ तारों को संभालने में पूरी तरह से सक्षम।

लेकिन आप सीधे ल्यूआ तारों में यूनिकोड कोडपॉइंट्स नहीं डाल सकते हैं। आप कोडपॉइंट को यूटीएफ -8 में विघटित कर सकते हैं और कोड स्ट्रॉइंट को स्ट्रिंग में डालने के लिए उपर्युक्त तंत्र का उपयोग कर सकते हैं। उदाहरण के लिए:

"x\226\131\151" 

यह x चरित्र Unicode combining above arrow character द्वारा पीछा किया है।

लेकिन चूंकि कोई लुआ फ़ंक्शन वास्तव में यूटीएफ -8 को समझता नहीं है, इसलिए आपको कुछ फ़ंक्शन का खुलासा करना होगा जो किसी भी तरह से उपयोगी होने के लिए यूटीएफ -8 स्ट्रिंग की अपेक्षा करता है।

3

जबकि मूल लुआ सीधे यूनिकोड का समर्थन या संभाल नहीं करता है, तो इसके तार वास्तव में मनमानी बाइट्स के बफर हैं जो सम्मेलन द्वारा एएससीआईआई पात्रों को पकड़ते हैं। चूंकि तारों में कोई बाइट मान हो सकता है, इसलिए यह मूल तारों के शीर्ष पर यूनिकोड के लिए समर्थन बनाने के लिए अपेक्षाकृत सरल है। यदि बाइट बफर इस उद्देश्य के लिए अपर्याप्त रूप से मजबूत साबित होते हैं, तो कोई भी userdata ऑब्जेक्ट का उपयोग कुछ भी पकड़ने के लिए कर सकता है, और उपयुक्त मेटाटेबल के अतिरिक्त, इसे सृजन के तरीकों के साथ समाप्त कर सकता है, वांछित एन्कोडिंग, कॉन्सटेनेशन, पुनरावृत्ति, और कुछ भी जरूरी है।

a page at the Lua User's Wiki है जो लुआ कार्यक्रमों में यूनिकोड को संभालने के विभिन्न तरीकों पर चर्चा करता है।

2

एक और अधिक आधुनिक जवाब के लिए के बारे में, लुआ 5.3 अब utf8.char:

प्राप्त शून्य या अधिक पूर्णांकों, उसके संगत UTF-8 बाइट क्रम के लिए हर एक को धर्मान्तरित और इन सभी अनुक्रमों के संयोजन के साथ एक स्ट्रिंग देता है।

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