# Umlautproblem unter Linux



## Raziell (17. Jan 2012)

Hallo zusammen ich habe eine fertige XML ohne angegebenes character encoding. 
Dort stehen unter anderem Umlaute drinne welche ich auf einer gui anzeige. 
Unter Linux gehen die Umlaute kaputt unter Windows klappt es. 
Ich dachte mir jetzt das ich die strings nur mit einem encoding initialisieren muss, 
allerdings funktioniert das leider auch nicht. 

Bsp.: String text = New String(title.getBytes(), "beliebiges encoding");

Ich hoffe jmd. Kann mir da helfen 

Danke


----------



## HoaX (17. Jan 2012)

Gib einfach beim Einlesen des XML das passende Encoding mit an.


----------



## irgendjemand (18. Jan 2012)

also das die umlaute unter linux kaputt sind aber unter windows funktionieren deutet darauf hin das das XML unter windows mit ISO-1252 geschrieben wurde ...

lösung : mit notepad öffnen und als UTF-8 / unicode speichern ... dann sollte weder linux noch java probleme mit bekommen wenn du dort beim einlesen ebenfalls UTF-8 / unicode angibst ...


----------



## HoaX (18. Jan 2012)

Wenn du das Encoding der Datei änderst, dann mag es zwar unter Linux gehn, aber dann wird es nichtmehr unter Windows gehn...


----------



## musiKk (18. Jan 2012)

Wenn in XML das Encoding nicht angegeben wird (in der XML declaration), wird automatisch UTF-8 verwendet. Gibt es also platformspezifische Unterschiede, ist definitiv irgendwo ein Fehler. Wenn es z. B. so ist, wie irgendjemand sagt, also dass die Datei mit Windows-1252 (das ist kein ISO-Standard) encodiert wurde, ohne dass das in der XML declaration vermerkt ist, ist die Datei ungültig. Ohne Code lässt sich aber nicht viel sagen.


----------



## Raziell (18. Jan 2012)

Also ich benutze einen BufferedInput- und BufferedOutputStream mit jeweils FileInput- und FileOutputStream. 
Ich habe jetzt dort allerdings keine Möglichkeit gefunden ein Encoding anzugeben.

Die XML wird einfach wie auch hier getting text values from a NodeList, XML,XML Tutorials,Online XML Tutorial,XML Help Tutorials geparst und als Strings ausgegeben.


----------



## musiKk (18. Jan 2012)

Raziell hat gesagt.:


> Also ich benutze einen BufferedInput- und BufferedOutputStream mit jeweils FileInput- und FileOutputStream.
> Ich habe jetzt dort allerdings keine Möglichkeit gefunden ein Encoding anzugeben.



Streams haben kein Encoding; das sind reine Byte-Ströme. Nur Reader haben Encodings. Zum Konvertieren gibt es [c]InputStreamReader[/c] und [c]OutputStreamWriter[/c].

Das sollte im Zusammenhang mit XML aber eigentlich egal sein. Ein XML-Parser sollte sich, falls nicht explizit angegeben, selbst um das Encoding kümmern.


----------



## Raziell (18. Jan 2012)

Das heisst der Fehler liegt am Code?
Kann ich mir ja iwie nicht vorstellen weil da passiert ja eigtl. nichts ausser das parsen der XML mit dem DOMParser.

Danke


----------



## Raziell (18. Jan 2012)

Also ich schreibe und lese die XML jetzt mittels OutputStreamWriter und InputStreamReader.
Beide jeweils mit UTF-8 Codierung. Wenn ich das mache ist die Codierung bereits im Windows kaputt.

Hier ein paar Code Ausschnitte:


```
private String readStringFromFile(String filename) {
		String txt = "";
		File file = new File(Configuration.XML_FILE_PATH);
		try {
			FileInputStream fis = new FileInputStream(file);
			InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
			txt = readStream(isr);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return txt;
	}

	public String readStream(InputStreamReader isr) {
		StringBuffer sb = new StringBuffer();
		char ch;
		int i;
		try {
			while ((i = isr.read()) >= 0) {
				ch = (char) i;
				sb.append(ch);
			}
			isr.close();
		} catch (IOException e) {
			System.err.println("Fehler beim Lesen: " + e);
		}
		return sb.toString();
	}
```



```
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		StringBuilder txt = new StringBuilder();
		String inputLine;

		while ((inputLine = in.readLine()) != null) {
			txt.append(inputLine);
		}
		in.close();

		Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), "UTF-8"));
		out.write(txt.toString());
		out.close();
```

Ich hoffe einer hat ne Idee


----------



## irgendjemand (18. Jan 2012)

musiKk hat gesagt.:


> Windows-1252 (das ist kein ISO-Standard)
> 
> 
> 
> ...


----------



## Raziell (19. Jan 2012)

Hi,

ich habe nur folgenden Code:


```
final StringBuilder text = new StringBuilder();
		BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));

		try {
			String s;
			while (null != (s = in.readLine())) {
				text.append(s);
			}
		} finally {
			in.close();
		}
```

In text sind die Umlaute bereits kaputt. Obwohl laut Firefox und Editor die XML hinter url.openStream() im UTF-8 Format vorliegt.
Wie kann das sein?

Danke


EDIT:

Mit "ISO-8859-1" klappt alles unter Windows und Linux.


----------

