2010-04-29 8 views
9

मैं एंड्रॉइड एपीआई उदाहरणों में दिखाए गए मानक इनपुटस्ट्रीम रीडर विधियों का उपयोग करके विस्तारित वर्ण (उदाहरण के लिए फ्रेंच उच्चारण वाले वर्ण) को टेक्स्ट फ़ाइल में पढ़ और लिख नहीं सकता। जब मैं फ़ाइल का उपयोग कर वापस पढ़ता हूं:एंड्रॉइड पर डिस्क पर यूटीएफ -8 को कैसे पढ़ और लिखना है?

InputStreamReader tmp = new InputStreamReader(in); 
BufferedReader reader = new BufferedReader(tmp); 
String str; 
while ((str = reader.readLine()) != null) { 
... 

स्ट्रिंग पठन अंतराल के बजाय विस्तारित वर्णों पर छोटा कर दिया जाता है। स्ट्रिंग का दूसरा भाग अगली पंक्ति पर आता है। मुझे लगता है कि मुझे अपने डेटा को यूटीएफ -8 के रूप में जारी रखने की आवश्यकता है लेकिन मुझे इसका कोई उदाहरण नहीं मिल रहा है, और मैं जावा में नया हूं।

क्या कोई मुझे प्रासंगिक दस्तावेज या उदाहरण के लिए एक लिंक प्रदान कर सकता है?

+0

यह वास्तव में एक सामान्य जावा प्रश्न है। – itsadok

+0

क्या यह सामान्य जावा है? यदि आप एंड्रॉइड पर निजी डेटा क्षेत्र में लिखने के लिए openFileOutput का उपयोग करते हैं, तो एक वर्णमाला विकल्प के साथ कोई कन्स्ट्रक्टर नहीं है: http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String ,% 20int% 2 9 –

उत्तर

26

बहुत सरल और सीधा। :)

String filePath = "/sdcard/utf8_file.txt"; 
String UTF8 = "utf8"; 
int BUFFER_SIZE = 8192; 

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), UTF8),BUFFER_SIZE); 
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), UTF8),BUFFER_SIZE); 
+0

धन्यवाद। क्या यह निजी डेटा क्षेत्र में सहेजते समय भी काम करता है? –

+0

निश्चित रूप से। ओपनफाइलऑटपुट (..) 'से ऊपर एंड्रॉइड-विशिष्ट कुछ भी नहीं। – yanchenko

+0

मेरा मतलब है openFileOutput का उपयोग करना? –

9

जब आप InputStreamReader को तुरंत चालू करते हैं, तो उस निर्माता का उपयोग करें जो एक चरित्र सेट लेता है।

InputStreamReader tmp = new InputStreamReader(in, "UTF-8"); 

और इसलिए है कि मैं फोन (Doc में अधिक देखें) कर सकते हैं OutputStreamWriter

के साथ एक समान बात मुझे पसंद है, एक

public static final Charset UTF8 = Charset.forName("UTF-8"); 
मेरे कोड में कुछ उपयोगिता कक्षा में

के लिए करते हैं

InputStreamReader tmp = new InputStreamReader(in, MyUtils.UTF8); 

और प्रत्येक को UnsupportedEncodingException को संभालना नहीं है एक बार।

1

यह सिर्फ एंड्रॉयड पर काम करना चाहिए, यहां तक ​​कि स्पष्ट रूप से UTF-8 निर्दिष्ट किए बिना क्योंकि डिफ़ॉल्ट चारसेट UTF-8 है। यदि आप समस्या के किसी भी इस तरह ऐसा करने की कोशिश का सामना

http://code.google.com/p/android/issues/entry

+0

मुझे निश्चित रूप से बग को ठीक करने के लिए यूटीएफ -8 में बदलना पड़ा। मेरे उपयोगकर्ताओं के साथ एक सकारात्मक परिणाम था, जिन्होंने पहले पाया था कि फ्रांसीसी ई circumflex जैसे 'विस्तारित वर्ण', फ़ाइल को ठीक से फिर से नहीं पढ़ा। मुझे एक उपयोगकर्ता को अपनी फाइल भेजने के लिए मिला और जब मैंने इसे डीबगर में वापस पढ़ा तो मैंने देखा कि विस्तारित पात्रों को लाइन-एंडिंग के रूप में माना जा रहा था। मेरे पास अभी भी मूल फाइलें हैं।जब मैं घर पर वापस आऊंगा तो मैं उनका प्रदर्शन करने के लिए एक परीक्षण परियोजना चलाऊंगा। कोड के लिए मेरा पहला प्रश्न देखें: http://stackoverflow.com/questions/2700983/problem-saving-file-on-motorola-droid-android-2-1 –

0

: यदि आप इस समस्या को पुन: कर सकते हैं, कृपया एक reproduceable परीक्षण का मामला यहाँ के साथ एक बग बढ़ा। आपको और Decode पर अपने डेटा को Base64 में रखना होगा। यह मेरे लिए काम किया। अगर आपको इसकी ज़रूरत है तो मैं कोड साझा कर सकता हूं।

0

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

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