# Encoding Problem Windows



## CHAOSFISCH (14. Feb 2012)

Servus,

hab nur unter Windows ein Probelm mit dem Encoding.
Als fix hilft bisher nur der Parameter -Dfile.encoding=UTF8 -- halt das Setzen der Systemvariable beim Aufruf des Programms. Soweit ich weiß geht es aber auch ohne den Parameter:
Dazu kurz der Programmaufbau:
Der Benutzer gibt Daten ein und diese werden dann in XML / Atom Format an einen Server gesendet: Die Verbindung hat UTF8 als encoding gesetzt. Der XML Header zeigt UTF8 encoding an, die Datenbank in der die Daten vorher gespeichert sind ist in UTF8.

Die Daten kommen dann jedoch als die schönen ? an.

Die XML Daten die gesendet werden kommen aus einer Resource im JAR File.
Wenn ich das richtig verstanden habe, dann muss ich dem FileInputStream als 2. Parameter nur das Encoding "UTF8" angeben, um das Problem zu umgehen -- das bringt jedoch nichts.

Was kann man da noch man / wie kann man es richtig machen?

Gruß
CHAOSFISCH


----------



## Wildcard (14. Feb 2012)

Wichtig ist in welchem Encoding die Datei im Jar vorliegt. Wenn das nicht UTF-8 war (auf deutschem Windows ist cp1252 Standard), dann passt es natürlich nicht. 
-Dfile.encoding=UTF8 ist übrigens eine schlechte Idee. Besser im Reader/Writer ein explizites Encoding setzen.


----------



## CHAOSFISCH (15. Feb 2012)

Wildcard hat gesagt.:


> Wichtig ist in welchem Encoding die Datei im Jar vorliegt. Wenn das nicht UTF-8 war (auf deutschem Windows ist cp1252 Standard), dann passt es natürlich nicht.
> -Dfile.encoding=UTF8 ist übrigens eine schlechte Idee. Besser im Reader/Writer ein explizites Encoding setzen.



So, danke schonmal für die Antwort. Das -DXYZ nicht ideal ist weiß ich auch . Das war nur bisher das einzigste womit ich es hinbekommen habe.
Ich nehm mal an das folgendes richtig ist:

```
new InputStreamReader(in, "UTF8")
```
in ist ein DataInputStream der mit getClass().getResourceAsStream("Datei") erzeugt wird.

Da das Problem dann immer noch existiert muss ich von einem falschen Encoding der Datei im JAR ausgehen? Wie kann ich sinnvoll prüfen / sicherstellen, dass die Datei im UTF8 Zeichensatz vorliegt?

Gruß
CHAOSFISCH


----------



## maki (15. Feb 2012)

Sollte imho [c]UTF-8[/c] heissen, nicht [c]UTF8[/c].



> Wie kann ich sinnvoll prüfen / sicherstellen, dass die Datei im UTF8 Zeichensatz vorliegt?


IMHO kann man das nicht zu 100%.
Deswegen sollte man sich auf ein Encoding einigen und dann davon ausgehen.


----------



## gasssst (15. Feb 2012)

Und warum öffnest du einen DataInputStream auf eine Textdatei?


----------



## CHAOSFISCH (15. Feb 2012)

maki hat gesagt.:


> Sollte imho [c]UTF-8[/c] heissen, nicht [c]UTF8[/c].
> 
> 
> IMHO kann man das nicht zu 100%.
> Deswegen sollte man sich auf ein Encoding einigen und dann davon ausgehen.



Auch wenn ich es auf UTF-8 ändere, ändert sich nichts an den fehlerhaften Zeichen.
Mal bisserl mehr Code:

```
final String template = this.readFile(this.getClass().getResourceAsStream("/coreplugin/resources/gdata.xml"));

	private String readFile(final InputStream inputStream) throws UploaderException
	{
		String content = "";
		try {
			final BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

			String strLine;
			//Read File Line By Line
			while ((strLine = br.readLine()) != null) {
				content = content + strLine;
			}
			//Close the input stream
			inputStream.close();
		} catch (IOException ex) {//Catch exception if any
			throw new UploaderException("Konnte GData.xml nicht lesen", ex);
		}
		return content;
	}
```
D.h. es kann nur sein, dass die Datei ein falsches Encoding hat!??!? bzw. das erklärt mir halt nicht warum es nicht als UTF-8 genommen wird obwohl ich es angebe.

Gruß
CHAOSFISCH


----------



## maki (15. Feb 2012)

Ist die Datei denn wirklich in UTF-8 kodiert?


----------



## CHAOSFISCH (15. Feb 2012)

maki hat gesagt.:


> Ist die Datei denn wirklich in UTF-8 kodiert?



Wie gesagt: Wie ermittle ich das!


----------



## maki (15. Feb 2012)

UltraEdit bzw Notepad++ geben auf der Statuszeile ihre Meinung dazu ab.
Ansosnten mal mit einem HexEditor ansehen, hatten erst letztens den Fall dass eine BOM angegeben wurde: http://www.java-forum.org/java-basi...textdatei-einlesen-erstes-zeichen-falsch.html


----------



## CHAOSFISCH (15. Feb 2012)

maki hat gesagt.:


> UltraEdit bzw Notepad++ geben auf der Statuszeile ihre Meinung dazu ab.
> Ansosnten mal mit einem HexEditor ansehen, hatten erst letztens den Fall dass eine BOM angegeben wurde: http://www.java-forum.org/java-basi...textdatei-einlesen-erstes-zeichen-falsch.html



So funktioniert nun.
Ich hasse diese Encodingprobleme, schon bei Webseiten war das echt schlimm 
Ich hab jetzt den InputSReader UTF-8 angegeben. Den OutputWriter UTF-8 gegeben, der DB Verbindung UTF-8 extra nochmal zugewiesen, Log4j UTF-8 gegeben und siehe da funktioniert.

Danke für die Hilfe,
Gruß
CHAOSFISCH


----------

