2013-04-12 15 views
5

के अलावा किसी अन्य चीज़ पर SQLiteDatabase एन्कोडिंग सेट नहीं कर सकता है, मैं एक समस्या पर काम कर रहा हूं जहां मुझे एक स्क्लाइट डेटाबेस को दूसरे में संलग्न करने की आवश्यकता है। डेटाबेस में से एक मेरे ऐप द्वारा बनाया गया है और दूसरा रिमोट सर्वर से डाउनलोड किया गया है। मैं इसे वैध डेटा प्रारूप (जेएसओएन) में प्राप्त करना पसंद करूंगा, लेकिन मैं इस पहलू को नियंत्रित नहीं कर सकता।यूटीएफ -8

समस्या यह है कि डाउनलोड की गई SQL फ़ाइल के लिए एन्कोडिंग यूटीएफ -16 है। स्थानीय फाइल यूटीएफ -8 (एंड्रॉइड का डिफ़ॉल्ट) है। मैं दोनों फाइलों को अपने आप ठीक से पढ़ सकता हूं, लेकिन एन्कोडिंग केवल एटीटीएसी संचालन की अनुमति देता है जब एन्कोडिंग मेल खाता है।

जब भी मैं स्थानीय डेटाबेस बनाता हूं तो समाधान यूटीएफ -16 एन्कोडिंग का उपयोग करने जितना सरल होना चाहिए, लेकिन ऐसा लगता है कि डेटाबेस ऑब्जेक्ट प्राप्त करने से पहले एन्कोडिंग हमेशा सेट होती है और मैं इसे बदल नहीं सकता। मैं एक SQLiteOpenHelper उपयोग कर रहा हूँ और मैं मान लिया है कि सभी PRAGMA बयान() तो जैसे onConfigure में होना चाहिए:

@Override 
public void onConfigure(SQLiteDatabase db) { 
    db.execSQL("PRAGMA encoding = \"UTF-16le\""); 
} 

जब मैं इस बिंदु के बाद एन्कोडिंग जाँच, यह हमेशा UTF-8 है।

Log.d(TAG, DatabaseUtils.dumpCursorToString(db.rawQuery("PRAGMA encoding", null))); 

परिणाम:

04-12 11:10:07.116: D/MainActivity(10743): >>>>> Dumping cursor [email protected] 
04-12 11:10:07.116: D/MainActivity(10743): 0 { 
04-12 11:10:07.116: D/MainActivity(10743): encoding=UTF-8 
04-12 11:10:07.116: D/MainActivity(10743): } 
04-12 11:10:07.116: D/MainActivity(10743): <<<<< 

मैं भी स्मृति में एक डेटाबेस बनाने और उस की एन्कोडिंग की स्थापना की कोशिश की, लेकिन यह हमेशा UTF-8 रिपोर्ट बाद में:

SQLiteDatabase db = SQLiteDatabase.create(null); 
db.execSQL("PRAGMA encoding = \"UTF-16le\""); 

मैं थोड़ा उलझन में क्योंकि मैं इन यूटीएफ -16 एन्कोडेड डेटाबेस खोल सकता हूं और उनकी एन्कोडिंग सही ढंग से रिपोर्ट की गई है, लेकिन मैं डिवाइस पर एक बनाने के लिए प्रतीत नहीं कर सकता। डेटाबेस के एन्कोडिंग को सेट करने के लिए बिल्कुल कोई तरीका है क्योंकि मैं इसे बना रहा हूं?

+0

SQLite कमांड लाइन उपकरण UTF-16 मोड में डेटाबेस बनाने की अनुमति देते हैं। [यह उत्तर] (http://stackoverflow.com/a/21348574/53212) बताता है कि कैसे। – thomasrutter

उत्तर

0

एक क्लूजी समाधान के साथ आया। असल में, मेरे पास मेरे संपत्ति फ़ोल्डर में एक खाली यूटीएफ -16 डेटाबेस फ़ाइल है। जब मैं एक नया डेटाबेस बनाता हूं, तो मैं इस फ़ाइल को कॉपी करता हूं (मेरे SQLiteOpenHelper में) और इसके बाद सामान्य रूप से सबकुछ करें।

1

this और this एंड्रॉइड स्क्लाइट समर्थन केवल यूटीएफ -8 और यूटीएफ -16 के अनुसार।

क्या इससे मदद मिलती है? यारॉन

+0

मैं ऐप के बाहर बनाए गए यूटीएफ -16 डेटाबेस को खोल और सफलतापूर्वक क्वेरी कर सकता हूं, इसलिए एन्कोडिंग के लिए समर्थन समस्या नहीं है। मैं बस एक नए डेटाबेस के एन्कोडिंग सफलतापूर्वक सेट नहीं कर सकता। – Krylez

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