2011-11-26 5 views
7

द्वारा इटरेटिंग मुझे यूनिकोड कोडपॉइंट्स की एक श्रृंखला मिली है। मुझे वास्तव में क्या करने की ज़रूरत है, इन कोडपॉइंट्स के माध्यम से पात्रों की एक श्रृंखला के रूप में, कोडपॉइंट्स की एक श्रृंखला के रूप में पुनरावृत्त नहीं है, और प्रत्येक व्यक्तिगत चरित्र के गुण निर्धारित करते हैं, उदा। एक पत्र है, जो भी हो।यूनिकोड कोडपॉइंट्स चरित्र के माध्यम से चरित्र

उदाहरण के लिए, कल्पना करें कि मैं यूनिकोड-जागरूक टेक्स्टबॉक्स लिख रहा था, और उपयोगकर्ता ने एक यूनिकोड चरित्र दर्ज किया जो कि एक से अधिक कोडपॉइंट था- उदाहरण के लिए, "ई डायरेक्टिक"। मुझे पता है कि इस विशिष्ट चरित्र को एक कोडपॉइंट के रूप में भी प्रदर्शित किया जा सकता है, और उस रूप में सामान्यीकृत किया जा सकता है, लेकिन मुझे नहीं लगता कि यह सामान्य मामले में संभव है। मैं बैकस्पेस कैसे कार्यान्वित कर सकता हूं? यह स्पष्ट रूप से अंतिम कोडपॉइंट को मिटा नहीं सकता है, क्योंकि वे शायद एक से अधिक कोडपॉइंट दर्ज कर चुके हैं।

मैं यूनिकोड कोडपॉइंट्स के गुच्छा पर वर्ण के रूप में कैसे पुन: सक्रिय कर सकता हूं?

संपादित करें: आईसीयू द्वारा पेश किए गए ब्रेक इटरेटर जो मुझे चाहिए वह बहुत अधिक प्रतीत होता है। हालांकि, मैं आईसीयू का उपयोग नहीं कर रहा हूं, इसलिए मेरी समकक्ष कार्यक्षमता को कार्यान्वित करने के तरीके पर कोई संदर्भ एक स्वीकार्य उत्तर होगा।

एक और संपादन: यह पता चला है कि विंडोज एपीआई वास्तव में इस कार्यक्षमता की पेशकश करता है। एमएसडीएन सिर्फ सभी स्ट्रिंग कार्यों को एक ही स्थान पर रखने के बारे में बहुत अच्छा नहीं है। CharNext वह फ़ंक्शन है जिसे मैं ढूंढ रहा हूं।

+0

इस संदर्भ में आप "चरित्र" को कैसे परिभाषित करते हैं? कुछ ऐसा जो एक दृश्य ग्रैफेम में अनुवाद करता है? –

+0

@ निकोलबोलस: ऐसा कुछ। आदर्श रूप से, मेरा मतलब यह है कि कुंजीपटल पर एक महत्वपूर्ण संयोजन द्वारा दर्ज किया जाता है। – Puppy

+1

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

उत्तर

4

आईसीयू पुस्तकालय का उपयोग करें।

http://site.icu-project.org/

उदाहरण के लिए

:

http://icu-project.org/apiref/icu4c/classUnicodeString.html#ae3ffb6e15396dff152cb459ce4008f90

समारोह है कि एक विशेष चरित्र एक स्ट्रिंग में ऑफसेट पर चरित्र देता है।

+0

आईसीयू केवल * कोडपॉइंट * करेगा। – Puppy

+0

आपको क्या लगता है? – bmargulies

+0

क्योंकि मैंने अपने इंटरफ़ेस दस्तावेज़ों की जांच की है और इनमें से कोई भी मुझे जिस चीज की आवश्यकता है उससे संबंधित है? इसमें से कोई भी "ई-डाइक्रिटिक" को एक इकाई के रूप में नहीं पहचान पाएगा, दो नहीं। – Puppy

1

UTF8-CPP प्रोजेक्ट में स्वच्छ, पढ़ने में आसान, एसटीएल-जैसे एल्गोरिदम का कोडपॉइंट, चरित्र द्वारा चरित्र इत्यादि द्वारा यूनिकोड स्ट्रिंग्स कोडपॉइंट पर फिर से शुरू करने के लिए एक समूह है। आप प्रेरणा के लिए इसे देख सकते हैं।

ध्यान दें कि "चरित्र द्वारा चरित्र" दृष्टिकोण स्पष्ट नहीं हो सकता है। ऐसा करने का एक आसान तरीका सामान्यीकरण फॉर्म सी में एक यूटीएफ -32 स्ट्रिंग पर फिर से शुरू करना है, जो निश्चित लंबाई एन्कोडिंग की गारंटी देता है।

+0

यह मेरी समझ थी कि सभी * पात्रों को फॉर्म सी – Puppy

+0

में प्रदर्शित नहीं किया जा सकता था, इससे कोई फर्क नहीं पड़ता कि समस्या का कारण बन रहा है, लेकिन मैं कल्पना कर सकता हूं कि वियतनामी जैसी भाषाओं में डाइक्रिटिक्स की आश्चर्यजनक संख्या के साथ संयोजनों की एक बड़ी संख्या होती है एनएफसी के लिए हालांकि, अगर आप एनएफसी सबकुछ का प्रतिनिधित्व कर सकते हैं या नहीं, तो आपको यूनिकोड स्पेक को पढ़ना होगा। –

+1

ए "चरित्र द्वारा चरित्र" दृष्टिकोण संभव नहीं है, क्योंकि "वर्ण" परिभाषित नहीं किया गया है। – tchrist