InputStreamReader und WINDOWS-1252

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

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é
 
da das unter windows passiert, wäre es mal interessant, wenn du herausfindest, ob dein Detector die Datei sperrt (evtl. über den Inputstream) und ob die Sperre nicht dazu führt, dass Du Deine Datei nicht lesen kannst?
 
@gorefest
Treffer versenkt =) ... ok, der Schuss war gut, das Opfer ein anderes :D

Dank Deiner Vermutung habe ich mir den Code noch mal angesehen, obwohl Dateien anderer Codierung scheinbar fehlerfrei gelesen wurden.

Lösung: Einfach mal den FileInputStream schließen ;) .... habe ich vergessen und völlig übersehen.
Interessant ist daran, dass Dateien mit anderer Codierung scheinbar gelesen werden.
Der Inhalt wird nach bestimmten Elemten durchsucht, die mir Dateien jenseits der WINDOWS-1252 codierung auch lieferten.
Allerdings das auch nicht vollständig, was aber erst jetzt auffiel.

Warum Dateien mit der ANSI Codierung gar nichts mehr liefern... nu ja... kein Plan.

Fall erledigt, danke und Gruß
André
 

Neue Beiträge

Zurück