मैंने कुछ पाठ फ़ाइलों को पढ़ने और उन्हें एक स्ट्रिंग में बदलने के लिए java.io.FileReader का उपयोग करने की कोशिश की, लेकिन मैंने पाया कि परिणाम गलत तरीके से एन्कोड किया गया है और बिल्कुल भी पठनीय नहीं है।
यहाँ मेरा वातावरण है:
विंडोज 2003, ओएस एन्कोडिंग: CP1252
जावा 5.0
मेरी फाइलें UTF-8 एनकोडेड या CP1252 एन्कोडेड हैं, और उनमें से कुछ (UTF-8 एनकोडेड फाइलें) में चीनी (गैर-लैटिन) अक्षर हो सकते हैं।
मैं अपना काम करने के लिए निम्नलिखित कोड का उपयोग करता हूं:
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
उपरोक्त कोड काम नहीं करता है। मुझे लगा कि FileReader की एन्कोडिंग CP1252 है भले ही पाठ UTF-8 एन्कोडेड हो। लेकिन java.io.FileReader के JavaDoc का कहना है कि:
इस वर्ग के निर्माता मानते हैं कि डिफ़ॉल्ट चरित्र एन्कोडिंग और डिफ़ॉल्ट बाइट-बफर आकार उपयुक्त हैं।
क्या इसका मतलब यह है कि अगर मैं FileReader का उपयोग कर रहा हूं तो मुझे खुद से चरित्र एन्कोडिंग सेट करने की आवश्यकता नहीं है? लेकिन मुझे वर्तमान में गलत तरीके से एन्कोड किया गया डेटा मिला है, मेरे सैटूटियन से निपटने का सही तरीका क्या है? धन्यवाद।