Umlautproblem unter Linux

Raziell

Bekanntes Mitglied
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
 
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 ...
 
Wenn du das Encoding der Datei änderst, dann mag es zwar unter Linux gehn, aber dann wird es nichtmehr unter Windows gehn...
 
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.
 
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.
 
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
 
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:

Java:
	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();
	}


Java:
		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 🙂
 
Zuletzt bearbeitet:
Hi,

ich habe nur folgenden Code:

Java:
		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.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben