Chcę pobrać kodowanie ze strumienia.Java: Jak mogę uzyskać kodowanie z inputStream?
Pierwsza metoda - użycie InputStreamReader.
Ale zawsze zwraca kodowanie OS.
InputStreamReader reader = new InputStreamReader(new FileInputStream("aa.rar"));
System.out.println(reader.getEncoding());
wyjściowa: GBK
2-ty metoda - używać UniversalDetector.
Ale zawsze zwraca zero.
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();
wyjściowa: null
Jak mogę uzyskać prawo? :(
InputStreamReader będzie zawsze używać kodowania platformy. Nie próbuje wykryć kodowania w plikach. Jakiego rodzaju pliki używasz w UniversalDetector? W twoim przykładzie użyłeś pliku RAR, który jest skompresowanym formatem binarnym. Najpierw spróbuj użyć prostego pliku tekstowego ASCII. – prunge
cześć, zmieniłem typ pliku, wyjście "Fortunes.txt": Nie wykryto kodowania –
Nie wydaje się wykrywać "standardowego" UTF-8 lub UTF-16 bez BOM-u, ale działało dla UTF-16 z listą BOM dla mnie. Może rozważyć użycie innej biblioteki do wykrywania zestawów znaków? [Ten link] (http://stackoverflow.com/questions/499010/java-how-to-determine-trect-charrect-encoding-of-a-stream) może pomóc. – prunge