Andre Pohlmann
Mitglied
Hallo zusammen,
ich habe seit letzter Woche ein kleines Problem mit dem InputStreamReader und hoffe, dass hier jemand etwas Licht ins Dunkel bringen kann.
Problemstellung: Datei mit einer speziellen Codierung lesen
Um die Codierung zu ermitteln verwende ich jUniverselChardet
Das ermittelte encoding wird dann dem InputStreamReader übergeben. Soweit funktioniert das mit den meisten Dateien gut. Eine Problemdatei habe ich jedoch. Die Codierung soll wohl DOS-ANSI sein... der Editor unter Windows kann den Inhalt anzeigen und sagt es wäre ANSI.
Der oben genannte Code ermittelt WINDOWS-1252, was, wenn ich das richtig verstanden habe, Bestandteil von ANSI ist.
Problem:
gibt sofort -1, also File-Ende zurück.
Nach ein paar Tests bin ich mal auf die Idee gekommen den FileReader zu verwenden. Der kann die Datei einlesen, ohne Fehler.
Soweit ich weiß verwendet der FileReader, so wie auch der FileWriter, auch (nur) ANSI.
Wieso kann der das lesen und der InputStreamReader nicht?
Wäre schön wenn das jemand erklären könnte
Gruß
André
ich habe seit letzter Woche ein kleines Problem mit dem InputStreamReader und hoffe, dass hier jemand etwas Licht ins Dunkel bringen kann.
Problemstellung: Datei mit einer speziellen Codierung lesen
Um die Codierung zu ermitteln verwende ich jUniverselChardet
Code:
FileInputStream fis = new FileInputStream(script);
// ========== Encoding der Datei herausfinden ==========
UniversalDetector detector = new UniversalDetector(null);
int nread;
while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
detector.dataEnd();
String encoding = detector.getDetectedCharset();
// =====================================================
Das ermittelte encoding wird dann dem InputStreamReader übergeben. Soweit funktioniert das mit den meisten Dateien gut. Eine Problemdatei habe ich jedoch. Die Codierung soll wohl DOS-ANSI sein... der Editor unter Windows kann den Inhalt anzeigen und sagt es wäre ANSI.
Der oben genannte Code ermittelt WINDOWS-1252, was, wenn ich das richtig verstanden habe, Bestandteil von ANSI ist.
Problem:
Code:
isr = new InputStreamReader(fis, encoding);
System.out.println(isr.read());
gibt sofort -1, also File-Ende zurück.
Nach ein paar Tests bin ich mal auf die Idee gekommen den FileReader zu verwenden. Der kann die Datei einlesen, ohne Fehler.
Soweit ich weiß verwendet der FileReader, so wie auch der FileWriter, auch (nur) ANSI.
Wieso kann der das lesen und der InputStreamReader nicht?
Wäre schön wenn das jemand erklären könnte

Gruß
André