encoding einer text-datei

lumo

Top Contributor
Hallo,

ich weiss, dass das schon etliche male durchgekaut wurde.
zb hier: XML und Co. > Encoding Problem
und hier: XML und Co. > Umlaute in XStream

bei mir gehts zwar auch um xml, allerdings brauch ich das thema encoding auch noch in anderen files, die ich speichern muss, darum im allgemeinen forum ;)

ich habe mir aus den diversen threads (und google artikeln) ein kleines testprogramm zusammengestellt, das meine datei erstellt (incl encoding) und dann wieder ausliest.

also im genauen erstelle ich eine datei mit xml header (könnte es auch plain-text reinschreiben...)
in den header schreibe ich mir das encoding rein, mit dem es gespeichert wurde (oder gespeichert werden sollte ;))

danach habe ich zwei funktionen.
eine die versucht das file zu laden mit dem encoding das im header steht
und eine die das file lädt mit dem encoding das ihr der fileinputstream gibt.

und überraschung! es kommt jedesmal bockmist raus!
wo liegt mein fehler?

hier mein testprogramm:

Java:
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;

public class XML {

	public static void save() {
		try {
			String path = "sample.xml";
			String encoding = "UTF-8"; // "UTF-8", "ISO-8859-1"
			String lineFeed = "\n";
			String content = String.format(
					"<?xml version=\"1.0\" encoding=\"%s\"?>", encoding);
			String sampledata = "<sample>öäüÖÄÜß@€²³|µ~</sample>";

			FileOutputStream fos = new FileOutputStream(path);
			PrintWriter writer = new PrintWriter(new OutputStreamWriter(fos,
					encoding), true);
			writer.append(content);
			writer.append(lineFeed);
			writer.append(sampledata);
			writer.close();
			fos.close();
			// if you use xstream call it this way:
			// xstream.toXML(JTextField, writer);

		} catch (Exception e) {
			System.out.println("Error");
		}
	}

	public static void loadWithInputStreamReaderEncoding() {
		System.out.println("loadWithInputStreamReaderEncoding()");
		try {
			String path = "sample.xml";
			FileInputStream fis = new FileInputStream(path);
			BufferedInputStream bin = new BufferedInputStream(fis);
			InputStreamReader in = new InputStreamReader(bin);// , "8859_1"
			BufferedReader br = new BufferedReader(in);

			System.out
					.println("the file is encoded using: " + in.getEncoding());
			String theLine;
			// trying to output the data in the encodig of the file
			System.setOut(new PrintStream(new FileOutputStream(
					FileDescriptor.out), true, in.getEncoding()));
			System.out.println("trying encoding: "+in.getEncoding());
			while ((theLine = br.readLine()) != null) {
				System.out.println(theLine);
			}
			// close all
			br.close();
			in.close();
			bin.close();
			fis.close();
		} catch (Exception e) {
			System.out.println("Error");
			e.printStackTrace();
		}
	}
	public static void loadWithXMLencoding() {
		System.out.println("loadWithXMLencoding()");
		try {
			String path = "sample.xml";
			FileInputStream fis = new FileInputStream(path);
			BufferedInputStream bin = new BufferedInputStream(fis);
			InputStreamReader in = new InputStreamReader(bin);// , "8859_1"
			BufferedReader br = new BufferedReader(in);
			
			System.out
			.println("the file is encoded using: " + in.getEncoding());
			String xmlHeader = br.readLine();
			String encoding = xmlHeader.substring(xmlHeader
					.lastIndexOf("encoding=\"")
					+ "encoding=\"".length(), xmlHeader.lastIndexOf("\""));
			
			String theLine;
			// trying to output the data in the encodig of the header
			System.setOut(new PrintStream(new FileOutputStream(
					FileDescriptor.out), true, encoding));
			System.out.println("trying encoding: "+encoding);
			System.out.println(xmlHeader);
			while ((theLine = br.readLine()) != null) {
				System.out.println(theLine);
			}
			br.close();
			
			// close all
			br.close();
			in.close();
			bin.close();
			fis.close();
		} catch (Exception e) {
			System.out.println("Error");
			e.printStackTrace();
		}
	}
	
	public static void load() {
		loadWithInputStreamReaderEncoding();
		loadWithXMLencoding();
	}

	public static void main(String[] args) {
		XML.save();
		XML.load();
	}
}

EDIT: wenn ich statt dem writer das fos verwende, also
Java:
			fos.write(content.getBytes());
			fos.write(lineFeed.getBytes());
			fos.write(sampledata.getBytes());
kommt zumindest beim file encoding das korrekte raus. aber nicht beim utf-8!?
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
In welchem Encoding liegen denn deine Sourcen vor?
Unter Windows ist das Regelmässig nicht UTF-8... soll heissen:
Deine Sonderzeichen im Quelltext sind schon "müll" bevor sie in die XML Datei kommen ;)
 

lumo

Top Contributor
harr!

dann muss ich wohl das file-encoding der dateien schon auf utf-8 umstellen :)

danke für den hinweis!
(nach dem umstellen der file auf utf-8 hats geklappt :oops::lol:)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S String Encoding Verständnisproblem Allgemeine Java-Themen 22
X Encoding in Tomcat Allgemeine Java-Themen 2
B Input/Output Encoding ISO->UTF8 Allgemeine Java-Themen 3
Thallius Merkwürdiges StringBuilder verhalten (Char Encoding) Allgemeine Java-Themen 6
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
S Falsches Encoding bei Drag and Drop von Umlauten Allgemeine Java-Themen 16
M Datei wird nicht vollständig geschrieben (FileOutputStream, OutputStreamWriter, Encoding) Allgemeine Java-Themen 6
C Encoding Problem Windows Allgemeine Java-Themen 9
R Encoding FileWriter Allgemeine Java-Themen 1
C Encoding problem Allgemeine Java-Themen 22
C BASE64 encoding von Binärdaten Allgemeine Java-Themen 4
M Charset Encoding für Dateinamen Allgemeine Java-Themen 4
I Encoding Problem bei exec und Windows Allgemeine Java-Themen 2
S Encoding-Problem (?) Allgemeine Java-Themen 5
Y CSV Encoding Problem Allgemeine Java-Themen 6
A bufferedReader readline, encoding Allgemeine Java-Themen 5
N Encoding Unicode Textfile Allgemeine Java-Themen 5
S File encoding feststellen Allgemeine Java-Themen 4
S Bestes Text file encoding..? Allgemeine Java-Themen 36
P Textfiles laden - egal welches Encoding Allgemeine Java-Themen 9
J Encoding und Gewinnung von Zeichen aus der Hexa-Darstellung Allgemeine Java-Themen 6
P Textfile Encoding herausfinden Allgemeine Java-Themen 2
P Encoding-Probleme bei Properties-Dateien Allgemeine Java-Themen 5
R Encoding Allgemeine Java-Themen 10
B platform's default character encoding? Allgemeine Java-Themen 10
N Mal wieder char-encoding Probleme Allgemeine Java-Themen 5
M Problem mit Base64 Encoding Allgemeine Java-Themen 2
M Encoding automatisch erkennen Allgemeine Java-Themen 4
M Standart Encoding des OS ermiteln Allgemeine Java-Themen 4
S [Base64] Encoding von String nicht korrekt Allgemeine Java-Themen 5
byte String Encoding Allgemeine Java-Themen 9
S File Encoding im Programm setzen? Allgemeine Java-Themen 3
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
Scream_ilias Auf einer Website die anmeldedaten eingeben Allgemeine Java-Themen 9
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
L Echtzeitdaten aus einer Webseite ziehen mit Java Allgemeine Java-Themen 19
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
T Google Links in einer Liste Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben