2012-05-12 10 views
5

में यूनिकोड स्ट्रिंग्स लिखना मैं वर्तमान में स्क्लाइट और सी ++ का उपयोग कर एक प्रबंधक गेम बना रहा हूं। मुझे अपने गेम को बनाने के लिए आवश्यक लगभग हर क्षेत्र को कवर करने के लिए ट्यूटोरियल मिले हैं लेकिन एक मामूली समस्या उम्र के लिए मुझे परेशान कर रही है।सी ++ में एसक्यूलाइट डीबी

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

मैंने इस पर एक उत्तर खोजा है ऐसा लगता है कि सी ++ तार एएनएसआईआई में हैं या ऐसा कुछ है। किसी तरह मैं यूनिकोड तार के बजाय इस मुद्दे को नीचे दिखाया गया है से बचने के लिए लिखना चाहिए:

http://imageshack.dk//viewimage.php?file=/imagesfree/0Ej53884.png

किसी को पता है कि कैसे ग में यूनिकोड तार लिखने के ++ तो मैं निर्यात कर सकते हैं/SQLite DB से सही डेटा आयात?

+1

क्या आपने std :: wstring पर देखा है? – maress

+0

एएनएसआईआई जैसी कोई चीज नहीं है; यह [ASCII] (http://en.wikipedia.org/wiki/Ascii) (एक 7-बिट चरित्र सेट) और [एएनएसआई] (http://en.wikipedia.org/wiki/Windows) के बीच एक क्रॉस जैसा दिखता है -1252) (लैटिन -1 के समान 8-बिट चरित्र सेट के लिए माइक्रोसॉफ्ट का गलत नामक)। यूनिकोड तारों का प्रतिनिधित्व करने के कई तरीके हैं। [यूटीएफ -8] (http://en.wikipedia.org/wiki/Utf-8) आम तौर पर सबसे अच्छा है, लेकिन विंडोज़ का उपयोग करना पसंद है [यूटीएफ -16] (http://en.wikipedia.org/wiki/UTF -16)। –

उत्तर

4

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

इस पढ़ें यदि "UTF-8" एक परिचित विषय नहीं है: http://www.joelonsoftware.com/articles/Unicode.html

कॉल सी एपीआई

sqlite_exec(db_conn, "insert somevalue into sometable values(\"utf encoded string\""), NULL, NULL, "error"); 

काम करते हैं करने के लिए।

वास्तविक रूपांतरण मैन्युअल रूप से किया जा सकता है यदि आपको केवल सीमित मात्रा में कोडपेज का समर्थन करना है या पूर्ण समर्थन के लिए आईसीयू लाइब्रेरी का उपयोग करना है। वहाँ भी http://utfcpp.sourceforge.net/

CodeProject तरह libs हैं भी UTF-8 नमूना कोड का एक बहुत कुछ है:

http://www.codeproject.com/Articles/14637/UTF-8-With-C-in-a-Portable-Way

http://www.codeproject.com/Articles/5281/UTF-8-Encoding-and-Decoding

आदि

+0

बहुत बहुत धन्यवाद मैं इसे सुझावों के साथ जाने और परिणामों के साथ वापस आऊंगा :) – TPhoton

+0

आपका स्वागत है। मैं अनचेक उत्तरों पोस्ट नहीं करता हूं और मुझे विश्वास करता हूं कि मुझे वर्षों के लिए अपने मूल सिरिलिक वर्णमाला के साथ भी परेशानी है इसलिए यूटीएफ -8 एक बड़ी राहत थी :) –

+0

ठीक है, मैंने एक constlite सम्मिलन कथन को एक const wchar_t कमांड के रूप में बनाने में कामयाब रहा है। अगली समस्या जब मैं C++ में sqlite कमांड लिखता हूं: आरसी = sqlite3_exec (डीबी, sqlInsertTest, NULL, NULL, और त्रुटि); यह कहता है कि यह कॉन्स्ट चार से कॉन्स wchar_t में परिवर्तित नहीं हो सकता है, इसलिए किसी भी तरह से यह एक मानक char की अपेक्षा करता है और विशेष wchar_t नहीं। क्या आप wchar_t के लिए बराबर स्क्लाइट फ़ंक्शन जानते हैं? – TPhoton

-1

CppSqlite3U के प्रयोजन के लिए विकसित किया गया है sqlite3 के लिए एक रैपर होने के नाते, जो यूनिकोड का समर्थन नहीं करता है। CppSqlite3U आपके यूनिकोड कॉल के सामने के अंत के रूप में उपयोग किया जा सकता है।

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