मैं वर्तमान में एक शौक परियोजना (सी/सी ++) पर काम कर रहा हूं जो कि यूनिकोड के लिए पूर्ण समर्थन के साथ विंडोज और लिनक्स दोनों पर काम करना है। अफसोस की बात है, विंडोज और लिनक्स हमारे जीवन को और अधिक कठिन बनाते हुए विभिन्न एन्कोडिंग का उपयोग करते हैं।सी/सी ++ में क्रॉस-प्लेटफ़ॉर्म यूनिकोड: किस एन्कोडिंग का उपयोग करना है?
मेरी कोड में मैं यह दोनों विंडोज और लिनक्स के लिए आसान बनाने संभव के रूप में सार्वभौमिक रूप में डेटा का उपयोग करने की कोशिश कर रहा हूँ,। विंडोज़ में, wchar_t को डिफ़ॉल्ट रूप से यूटीएफ -16 के रूप में एन्कोड किया गया है, और लिनक्स में यूसीएस -4 के रूप में (अगर मैं गलत हूं तो मुझे सही करें)।
मेरा सॉफ़्टवेयर खुलता है ({_wfopen, UTF-16, Windows}, {fopen, UTF-8, Linux}) और यूटीएफ -8 में फ़ाइलों को डेटा लिखता है। अब तक यह सब करने योग्य है। जब तक मैंने SQLite का उपयोग करने का फैसला नहीं किया।
SQLite का C/C++ इंटरफ़ेस एक या दो-बाइट इनकोडिंग तार (click) के लिए अनुमति देता है। यह लिनक्स में wchar_t के साथ काम नहीं करता है, क्योंकि लिनक्स में wchar_t डिफ़ॉल्ट रूप से 4 बाइट्स है। इसलिए, एसक्लाइट से लिखना और पढ़ना लिनक्स के लिए रूपांतरण की आवश्यकता है।
वर्तमान कोड विंडोज़/लिनक्स के लिए अपवादों के साथ को अव्यवस्थित है। एक समस्या के बिना filepaths, पढ़ने/एक समस्या के बिना SQLite के लिए लिख: Windows में
- wchar_t: मैं wchar_t में डेटा भंडारण के मानक विचार करने के लिए छड़ी करने की उम्मीद कर रहा था। एक फ़ाइल में डेटा लिखना वैसे भी यूटीएफ -8 में किया जाना चाहिए। लिनक्स में
- wchar_t: पढ़ने/SQLite के लिए लिख (wchar_t) से पहले UTF-8 एन्कोडिंग, रूपांतरण की वजह से filepaths के लिए अपवाद है, और खिड़कियों के लिए एक ही है जब एक फाइल करने के लिए डेटा लेखन।
पढ़ने के बाद (here) मुझे विश्वास था कि मुझे विंडोज़ में wchar_t से चिपकना चाहिए। लेकिन काम करने के लिए सब कुछ पाने के बाद, समस्या लिनक्स को पोर्टिंग के साथ शुरू हुई।
वर्तमान में मैं इसे सरल चार (यूटीएफ -8) के साथ चिपकाने के लिए सभी को फिर से लिखने की सोच रहा हूं क्योंकि यह विंडोज और लिनक्स दोनों के साथ काम करता है, इस तथ्य को ध्यान में रखते हुए कि मुझे विंडोज़ में प्रत्येक स्ट्रिंग को 'वाइडरहरोमोल्टीबीटा' की आवश्यकता है UTF-8। सरल चार * आधारित स्ट्रिंग का उपयोग लिनक्स/विंडोज के लिए अपवादों की संख्या को बहुत कम कर देगा।
आप पार मंच के लिए यूनिकोड के साथ किसी भी अनुभव है? Wchar_t का उपयोग करने के बजाय यूटीएफ -8 में डेटा संग्रहीत करने के विचार के बारे में कोई विचार?
2byte वर्ण एन्कोडिंग निश्चित रूप से * नहीं * यूटीएफ -16 है।यूटीएफ -16 2 से 4 बाइट्स है, और यूटीएफ -8 1 - 4 बाइट्स है। विंडोज़ 'wchar_t' यूटीएफ -16 नहीं है, यह यूसीएस 2 है। अभ्यास में आपको अंतर दिखाई नहीं दे सकता क्योंकि यूसीएस 2 बीएमपी को कवर करता है, लेकिन यदि कभी भी आपके उपयोगकर्ता निर्णय लेते हैं कि उनके पास ओघम या रन में डेटा होना चाहिए ... – user268396
विंडोज यूटीएफ -16 का उपयोग करते हैं, और यूटीएफ -16 रखने के लिए 'wchar_t' का उपयोग करते हैं डेटा, और विंडोज 2000 के बाद से ऐसा किया है। –
wchar_t कितना उपयोगी है और इसके लिए: http://stackoverflow.com/a/11107667/365496 – bames53