का उपयोग करने के लिए कुछ स्कैनर कोड अपडेट करते समय प्रश्न मैं एक प्राथमिक हाथ से कोडित लेक्सिकल स्कैनर पर काम कर रहा हूं और यूटीएफ -8 इनपुट का समर्थन करना चाहता हूं (यह अब 1 9 70 नहीं है!)। इनपुट वर्ण stdin
या एक समय में फ़ाइल एक से पढ़े जाते हैं और व्हाइटस्पेस दिखाई देने तक एक बफर में धकेलते हैं। मैंने fgetc()
के लिए अपना स्वयं का रैपर लिखने के बारे में सोचा था जो इसके बजाय यूटीएफ -8 चरित्र बनाने वाले बाइट्स के char[]
लौटाएगा और एक स्ट्रिंग के रूप में परिणाम के साथ काम करें ... यह काफी आसान होगा, लेकिन एक फिसलन-ढलान बन जाएगा। मैं पहिया को पुन: आविष्कार करने का समय बर्बाद नहीं करना चाहूंगा और इसके बजाय ICU जैसी मौजूदा, परीक्षण लाइब्रेरी का उपयोग करूंगा। और इसलिए अब मेरे पास एक गैर-यूटीएफ -8 सहायक कोड है जो fgetc()
, isspace()
, strcmp()
आदि के साथ काम करता है, जिसे मैं आईसीयू का उपयोग करने के लिए अद्यतन करने का प्रयास कर रहा हूं। यह आईसीयू के साथ मेरा पहला प्रयास है और दस्तावेज के माध्यम से पढ़ रहा है और Google कोड खोज के साथ उपयोग उदाहरण खोजने की कोशिश कर रहा है, लेकिन अभी भी भ्रम के कुछ बिंदु हैं, मुझे उम्मीद है कि कोई स्पष्टीकरण देने में सक्षम होगा।आईसीयू
u_fgetc()
फ़ंक्शन UChar
, और u_fgetcx()
रिटर्न UChar32
... प्रलेखन कोड पॉइंट्स को पढ़ने के लिए u_fgetcx()
उपयोग करने की सलाह है, ताकि मैं क्या कर रहा हूँ के साथ शुरू है। मैं ऊपर जैसा ही दृष्टिकोण रख रहा हूं, लेकिन मैं UChar32
एस को char
एस के बजाय बफर में दबा रहा हूं।
ज्ञात मूल्य के विरुद्ध किसी चरित्र की तुलना करने का उचित तरीका क्या है? मूल रूप से मैं इनपुट से प्लस-साइन प्राप्त किया गया था या नहीं, यह जांचने के लिए
if (c == '+')
करने में सक्षम था। जीसीसी शिकायत नहीं करता है जबc
UChar32
है (जो तबUChar32
औरchar
के बीच तुलना करता है) लेकिन क्या यह वास्तव में उचित है?मैं
strcmp()
का उपयोग ज्ञात मान के साथ buffered वर्णों की तुलना करने के लिए करने में सक्षम था, उदाहरण के लिएif ((strcmp(buf, "else") == 0)
। आईसीयू द्वारा प्रदान किए गएu_strcmp()
और मुझे लगता है कि ज्ञात शाब्दिक निर्दिष्ट करने के लिए मुझेU_STRING_DECL
औरU_STRING_INIT
मैक्रोज़ का उपयोग करने की आवश्यकता हो सकती है, लेकिन मुझे निश्चित नहीं है। प्रलेखन से पता चलता है कि वेUChar[]
में परिणाम देते हैं, हालांकि मुझे लगता है कि मुझेUChar32[]
की आवश्यकता है ... और मुझे अनिश्चितता है कि वैसे भी उनका उपयोग कैसे करें। यहां कोई मार्गदर्शन का स्वागत किया जाएगा।संख्यात्मक वर्णों की एक श्रृंखला में पढ़ने के बाद मैं उन्हें
strtol()
के साथ परिवर्तित कर रहा हूं ताकि मैं उनके साथ काम कर सकूं। क्या आईसीयू द्वारा एक समान कार्य उपलब्ध कराया गया है क्योंकि मैं अबUChar32[]
परिवर्तित कर रहा हूं? जबकिUChar32
एक कोड प्वाइंट आयोजित करने के लिए है
ग्रेट प्रतिक्रियाएं, मैं सिर्फ अन्य पाठकों के लिए जोर दूंगा: यूनिकोड में अपनी तुलना करें, न कि char * s के रूप में। (इसलिए "x" या 'x' का उपयोग न करें)। अन्यथा आप कोडपेज मुद्दों में भाग सकते हैं। –