platform's default character encoding?

Status
Nicht offen für weitere Antworten.

benner

Aktives Mitglied
print

public void print(String s)

Print a string. If the argument is null then the string "null" is printed. Otherwise, the string's characters are converted into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the write(int) method.

Parameters:
s - The String to be printed

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?
 
kann man sicherlich irgendwo abfragen oder so:
Code:
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
 
Vielleicht hilft das:
Code:
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
 
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:
 
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...
 
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.
 
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?
 
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

Creates a new PrintWriter, without automatic line flushing, with the specified file and charset. This convenience constructor creates the necessary intermediate OutputStreamWriter, which will encode characters using the provided charset.

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.
 
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.
 
Vielen Dank, ich werd sehen für welche Variante ich mich entscheide, aber sicher beide ausprobieren :###
 
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben