# platform's default character encoding?



## benner (25. Jul 2007)

> print
> 
> public void print(String s)
> 
> ...



Dies ist ein Auszug aus der JavaAPI für die Klasse PrintWriter. Mein Problem ist das default character encoding. Von welchem Zeichensatz wird hier ausgegangen, wenn ich das ganze unter Windows XP ausführe?


----------



## SlaterB (25. Jul 2007)

kann man sicherlich irgendwo abfragen oder so:

```
public class Test2
{
    public static void main(String[] args) throws Exception
    {
        InputStreamReader e = new InputStreamReader(new FileInputStream("Datei, z.B. Test2.java"));
        System.out.println(e.getEncoding());
    }
}
```
bei mir
Cp1252


----------



## Murray (25. Jul 2007)

Vielleicht hilft das:

```
public class Test {
	public static void main( String[] args) {
	
		String encoding_undoc = System.getProperty( "file.encoding");
		String encoding_jdk15 = java.nio.charset.Charset.defaultCharset().name();
		String encoding_geek  = new java.io.InputStreamReader( new java.io.ByteArrayInputStream( new byte[0])).getEncoding();
  
		System.out.println( "encoding_undoc: " + encoding_undoc);
		System.out.println( "encoding_jdk15: " + encoding_jdk15);
		System.out.println( "encoding_geek:  " + encoding_geek);
	}
}
```

Beim (Win-XP deutsch) liefert das:
C:\home\work\070725>java Test
encoding_undoc: Cp1252
encoding_jdk15: windows-1252
encoding_geek:  Cp1252


----------



## benner (25. Jul 2007)

OK danke erstmal.
@ Murray: Ich vermute mal im String encoding_jdk15 steht die Antwort auf meine Frage? Was beinhalten dann die anderen beiden?

Auf Wikipedia steht, dass der Windows-1252-Zeichensatz auf ISO 8859-9 aufbaut, welches in Grundzügen dem ASCII-Code entspricht. Ich möchte den String über den Printwriter an die serielle Schnittstelle schicken, an der ein MEssgerät hängt. Dieses Gerät erwartet die Strings in ASCII-Code. Ich bin jetzt verwirrt. Heißt das das klappt, oder nicht?  :roll:


----------



## deleted (25. Jul 2007)

Bei UTF-8 sind z.B. die ersten 128 Zeichen ASCII Code.
Wenn das bei ISO 8859-9 auch so ist, dann sollte es eigentlich kein Problem sein, das einfach so zu senden.
Allerdings darfst du dann nur ASCII senden also kein Ö etc.
Wichtig ist ferner, dass der Beginn des Codes auch wirklich Byteweise codiert ist.
Also das erste Zeichen ist
0001 und nicht z.B. 0000 0001
Das sollte aber im Wikipedia stehen...


----------



## Murray (25. Jul 2007)

benner hat gesagt.:
			
		

> @ Murray: Ich vermute mal im String encoding_jdk15 steht die Antwort auf meine Frage? Was beinhalten dann die anderen beiden?



Cp1252 ist der Name, wie er von den Packages java.lang und java.io verwendet wird; windows-1252 ist das gleiche Encoding, aber mit dem Namen, wie er vom Package java.nio verwendet wird. Aus irgendwelchen Gründen gibt es da unterschiedliche Bezeichnungen, siehe hier.


----------



## benner (26. Jul 2007)

Also ich habe mit jetzt mal in java.nio.charset.Charset umgesehen und da gibt es ja z.B. auch explizit US-ASCII. Das würde ich jetzt gern als Standardzeichensatz einstellen. Nur irgendwie habe ich keine Ahnung wie ich das genau anstellen soll, eine entsprechende Methode wie z.b. "setdefaultcharset()" gibts ja nicht =( 

Ich vermute ich muss einen CharsetEncoder verwenden? Aber der ist ja wiederrum an eine Instanz von Charset gebunden, die ich nicht erstellen kann, da ich diese Klasse nicht instanziieren kann. Könnte mir jemand einen Tip geben? Ich brauch das nicht fertig vorgekaut, aber für einen Hinweis wäre ich sehr dankbar. Oder bin ich mit meiner Idee prinzipiell auf dem Holzweg?


----------



## Murray (26. Jul 2007)

Das Default-Charset kann man wohl nicht umstellen. Man kann allerdings dem PrintWriter bereits im Konstruktor ein Charset mitgeben




			
				javadoc hat gesagt.:
			
		

> public PrintWriter(File file,
> String csn)
> throws FileNotFoundException,
> UnsupportedEncodingException
> ...



Stutzig macht man dann allerdings doch die Aussage, in der von dir geposteten Doku, nach dem bei print immer das Default-Encoding genutzt wird. Also besser ausprobieren.


----------



## Murray (26. Jul 2007)

Wenn du das Encoding komplett in der Hand haben willst, kannst du alternativ auch mit einem (Buffered)OutputStream anstelle des PrintWriter arbeiten und die Strings mit String#getBytes( String charset) vor der Ausgabe selbst in die Binärrepräsentation deiner Wahl umsetzen.


----------



## benner (26. Jul 2007)

Vielen Dank, ich werd sehen für welche Variante ich mich entscheide, aber sicher beide ausprobieren  :###


----------



## benner (30. Jul 2007)

Hm, also der hier angesprochene Teil funktioniert jetzt, ich kann mir auch hinterher den Bytecode der einzelnen Characters ausgeben lassen, der stimmt jeweils mit der Ascii-Tabelle überein, aber trotzde kommt vom angesprochenen Gerät keine Reaktion...ich danke euch trotzdem für eure Hilfe.


----------

