मुझे स्ट्रीम से एन्कोडिंग मिलना है।जावा: मैं इनपुटस्ट्रीम से एन्कोडिंग कैसे प्राप्त कर सकता हूं?
पहली विधि - इनपुटस्ट्रीम रीडर का उपयोग करने के लिए।
लेकिन यह हमेशा ओएस एन्कोड लौटाता है।
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
उत्पादन: GBK
2 विधि - UniversalDetector उपयोग करने के लिए।
लेकिन यह हमेशा शून्य हो जाता है।
FileInputStream input = new FileInputStream("aa.rar");
UniversalDetector detector = new UniversalDetector(null);
byte[] buf = new byte[4096];
int nread;
while ((nread = input.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
// (3)
detector.dataEnd();
// (4)
String encoding = detector.getDetectedCharset();
if (encoding != null) {
System.out.println("Detected encoding = " + encoding);
} else {
System.out.println("No encoding detected.");
}
// (5)
detector.reset();
उत्पादन: अशक्त
कैसे मैं सही मिल सकता है? :(
इनपुटस्ट्रीम रीडर हमेशा प्लेटफ़ॉर्म एन्कोडिंग का उपयोग करेगा। यह फाइलों में एन्कोडिंग का पता लगाने का प्रयास नहीं करता है। यूनिवर्सलडिएक्टर के माध्यम से आप किस प्रकार की फाइलें चला रहे हैं? आपके उदाहरण में आपने एक आरएआर फ़ाइल का उपयोग किया, जो एक संपीड़ित बाइनरी प्रारूप है। पहले एक साधारण ASCII पाठ फ़ाइल के साथ प्रयास करें। – prunge
नमस्ते, मुझे फ़ाइल प्रकार, 'Fortunes.txt' आउटपुट बदल दिया गया है: कोई एन्कोडिंग नहीं मिली –
यह बीओएम के बिना 'मानक' यूटीएफ -8 या यूटीएफ -16 का पता लगाना प्रतीत नहीं होता है, लेकिन यह यूटीएफ -16 के लिए काम करता है मेरे लिए एक बीओएम के साथ। शायद वर्णमाला पहचान के लिए एक अलग पुस्तकालय का उपयोग करने पर विचार करें? [यह लिंक] (http://stackoverflow.com/questions/499010/java-how-to-determine-the-correct-charset-encoding-of-a-stream) मदद कर सकता है। – prunge