सी

2014-09-04 4 views
6

में मल्टीबाइट वर्ण कैसे बनाएं सी और सी ++ में वर्ण एन्कोडिंग के अपने अध्ययन के दौरान मैं एन्कोडिंग के दो सामान्य तरीकों से आया: मल्टीबाइट वर्ण और विस्तृत वर्ण। उन प्रणालियों (लाभ और कमी) की मेरी समझ को मजबूत करने के लिए मैं कुछ उदाहरण करना चाहता था। व्यापक वर्णों के साथ उदाहरण करना wchar_t प्रकार के मूल समर्थन के कारण कोई समस्या नहीं है। लेकिन जब मैं एक स्ट्रिंग बनाना चाहता था जिसमें उन तथाकथित मल्टीबाइट वर्ण शामिल हैं, तो मुझे एक समस्या आई।सी

मैं वास्तव में एक मल्टीबाइट वर्ण स्ट्रिंग कैसे बना सकता हूं जो एक एरेकिंग का उपयोग करता है जो एक चार सरणी (विज़ुअल सी ++ का उपयोग करके) के साथ काम करता है? इस प्रकार का एन्कोडिंग सुनिश्चित है: http://www.gnu.org/software/libc/manual/html_node/Shift-State.html। लेकिन मैंने केवल इसके बारे में पढ़ा और कभी भी एक वास्तविक उदाहरण नहीं देखा। या क्या आपको इस तरह की स्ट्रिंग के लिए अपना एन्कोडिंग बनाना है?

+0

क्यूटी में ट्रंक फ़ंक्शन है जो मल्टीबाइट तारों के साथ कंपाइलर्स में अंतर को नियंत्रित करता है। आपको बस अपनी स्रोत फ़ाइल को utf-8 में एन्कोड करना है और स्ट्रिंग अक्षर के साथ tr को कॉल करना है। –

+1

क्या आपका मतलब sth है। '\ xc3 \ x84" 'की तरह? (यह जर्मन "यूटीएफ -8 कोडित है) –

+0

@ डेविडफ्यूरल मुझे नहीं लगता कि यह सही है,' tr() 'i18n (अनुवाद) के लिए है। – Angew

उत्तर

2

यदि आप विस्तृत वर्ण स्ट्रिंग को शाब्दिक बनाने में सक्षम हैं, तो बस एल को छोड़कर आपको एक कार्यान्वयन परिभाषित एन्कोडिंग के साथ एक बहुउद्देश्यीय वर्ण स्ट्रिंग अक्षर देना चाहिए (जीसीसी के पास इसे चुनने का विकल्प है, मुझे दृश्य सी ++ के बारे में पता नहीं है)।

आप एक विस्तृत चरित्र स्ट्रिंग है, तो आप सी लोकेल (<stdlib.h> में) कार्य wcstombs का उपयोग करने और wcsrtombs (<wchar.h> में) के अनुसार बराबर multibyte स्ट्रिंग प्राप्त कर सकते हैं।

सी ++ लोकेल सिस्टम भी उस रूपांतरण को करने का एक तरीका प्रदान करता है। (in और outcodecvt पहलू के सदस्य की तलाश करें, मैं उनके उपयोग पर एक ट्यूटोरियल प्रदान नहीं करूंगा, साइट cppreference उदाहरण कोड है, उदाहरण के लिए out)।

मुझे यकीन नहीं है कि आप एक यूनिक्स या विंडोज पर एक शिफ्ट स्थिति के साथ एन्कोडिंग के लिए आसानी से समर्थन पा सकेंगे। आपको चीन, जापान, कोरिया, वियतनाम (उदाहरण के लिए ISO 2022-JP) के लिए एन्कोडिंग की खोज करनी चाहिए, लेकिन ऐसा लगता है कि यूनिक्स EUC-JP और Windows Shift JIS) का उपयोग करता है।