Umlaute als Umlaute ausgeben (ä,ü,ö,ß)

zunächst vielen dank für mein IO-Problem (s.Artikel unten).
Das Problem ist behoben (s. Code am Ende dieses Artikels).
Problem ist nun aber:
Wenn ich aus meiner Textdatei Zeilenweise auslese und die Zeilen enthalten Umlaute, werden diese in JAVA merkwürdig ausgegeben.
Wie kann ich Umlaute als Umlaute lesen und ausgeben.

Hier mein Code:

try{
String sLine;
BufferedReader br = new BufferedReader (new FileReader(sFilePath));
while ((sLine = br.readLine()) != null){
parsing(sLine,sDelimiter);
}
br.close();
}
catch(IOException e){
System.err.println(e);
}

Hi ho,

ich hab hier ein Stückchen Code, mit dem Du Umlaute aus Textdateien lesen und auch darstellen kannst:

public String load() throws IOException
{
 String result = null;
 //
 File file = getFile(); //get the file to load
 // inputstream to read from file 
 FileInputStream fis = new FileInputStream(file);
 DataInputStream dis = new DataInputStream(fis);
 //
 ByteToCharUTF8 converter = new ByteToCharUTF8();
 // get length of testfile
 int size = (int) file.length();
 // create buffer to store testfile
 byte[] data = new byte[size];
 // read data into buffer
 int read = dis.read(data);
 // convert from byte-array to string
 result = new String(converter.convertAll(data));
 data = null;
 // close testfile
 dis.close();
 fis.close();
 converter.reset();
 converter = null;
 file = null;
 //
 return result;
}

Die Klasse ByteToCharUTF8 findest Du im Package sun.io
Das Grundproblem dürfte die Darstellung der Zeichen im FileStream sein. Textdateien werden i.d.R. als ASCII Dateien gespeichert (ein Byte pro Zeichen). Java repräsentiert Strings im Unicode Format. Daher die Umwandlung in UTF8 (zwei Byte pro Zeichen).

Ich hoffe, das hat geholfen :smile:

Ciao,

Herb

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Herb,
es lief nicht ganz.
Bei der Zuweisung:
result = new String(converter.convertAll(data));
bekomme ich eine „MalformedInputException“.

Sonst: Gibt es die Möglichkeit, Zeilenweise aus der Datei
zu lesen und diese zu konvertieren?

Hi ho,

ich hab hier ein Stückchen Code, mit dem Du Umlaute aus
Textdateien lesen und auch darstellen kannst:

public String load() throws IOException
{
String result = null;
//
File file = getFile(); //get the file to load
// inputstream to read from file
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
//
ByteToCharUTF8 converter = new ByteToCharUTF8();
// get length of testfile
int size = (int) file.length();
// create buffer to store testfile
byte[] data = new byte[size];
// read data into buffer
int read = dis.read(data);
// convert from byte-array to string
result = new String(converter.convertAll(data));
data = null;
// close testfile
dis.close();
fis.close();
converter.reset();
converter = null;
file = null;
//
return result;
}

Die Klasse ByteToCharUTF8 findest Du im Package sun.io
Das Grundproblem dürfte die Darstellung der Zeichen im
FileStream sein. Textdateien werden i.d.R. als ASCII Dateien
gespeichert (ein Byte pro Zeichen). Java repräsentiert Strings
im Unicode Format. Daher die Umwandlung in UTF8 (zwei Byte pro
Zeichen).

Ich hoffe, das hat geholfen :smile:

Ciao,

Herb

Hi ho,

welchen JDK verwendest Du? Und welches OS? Ich habe die Methode mit JDK118 und JDK122 unter Win98 und WinNT4 getestet, und da lief alles… Vielleicht schmeißt Du einfach mal den Debugger an. Ich weiss nicht, welche Entwicklungsumgebung Du verwendest, ich habe hier Visual Age 3.02.

Ich nehme mal an, die Methode ByteToCharUTF8::convertAll(byte[]) liefert bei Dir kein Character-Array. Oder der DataInputStream liest die Daten nicht korrekt in den Buffer. Hast Du das mit einer kleineren Datei mal getestet, oder gleich eine sehr große Datei gelesen? Ich habs nur mit Dateien [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi ho :wink:

welchen JDK verwendest Du?

JDK122

Und welches OS?

Ich hoffe, daß die bei „Java“ keine Relevanz haben muß.
Sonst arbeite ich unter Win2000

Vielleicht schmeißt Du einfach mal den Debugger an.
Ich weiss nicht, welche Entwicklungsumgebung Du
verwendest, ich habe hier Visual Age 3.02.

Also z.Z. arbeite ich mit JBuilder4.0

Hast Du das mit einer kleineren
Datei mal getestet, oder gleich eine sehr große Datei gelesen?
Ich habs nur mit Dateien

Hi,

naja, wenn die Dateien eine überschaubare Größe haben, dann wäre mein Vorschlag, sie auf einen Schlag einzulesen (Byte-Array), in einen String zu konvertieren und dann den String zeilenweise zu bearbeiten. Das geht schon, löst aber Dein Problem mit der MalformedInputException nicht…

Ich schicke Dir per mail mal die ganze Klasse, vielleicht hilft das ja ?

Ciao,

Herb

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke
ich Danke Dir :smile: