Konsole gibt "?" aus

Lasslow

Grünschnabel
Hi...

ich habe mal wieder einen Kampf gegen Zeichensätze und weiß nicht weiter. Zu den möglicherweise relevanten Infos:

Windows XP SP3 - Deutsch

Ziel: Ein Netzlaufwerk mit Java verbinden und die Konsolenausgabe des Prozesses p zu bekommen. Hier einmal Code!

Code:
package system.process.io;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class TestProcessIO {

	private TestProcessIO() { }
	
	public static void main(String[] args) {
		Runtime rt = Runtime.getRuntime();
		Process p;
		
		
		try {
			p = rt.exec("net use v: \\\\server.de\\langer\\link /user:ballablub unglaublichsicher");

		} catch (IOException e) {
			p = null;
			e.printStackTrace();
		}
		

		BufferedReader error;
		BufferedReader input;
		try {
			error = new BufferedReader(new InputStreamReader(p.getErrorStream(), "UTF-8"));
			input = new BufferedReader(new InputStreamReader(p.getInputStream(), "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			error = null;
			input = null;
			e.printStackTrace();
		}

		String line;
		/* print errorstream */
		try {
			do {
				line = error.readLine();
				if(line != null) System.out.println(line);
			} while (line != null);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		/* print inputstream */
		try {
			do {
				line = input.readLine();
				if(line != null) System.out.println(line);
			} while (line != null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Nun erhalte ich die Ausgaben die ich möchte... allerdings werden alle Sonderzeichen mit Fragezeichen ersetzt ca. so:

Code:
Systemfehler 85 aufgetreten.

Der lokale Ger?tename wird bereits verwendet.

Das connecten funktioniert. Ich hab nur den ganzen Code gepostet, da ich sicher gehen wollte, dass der Zusammenhang klar wird.

Danke danke
und bye bye

Daniel

P.S.: Suchfunktion bereits verwendet jedoch keine funktionierende Lösung gefunden
 
Hi,

Windows arbeitet nicht mit UTF-8, sondern mit cp1250.

Eventuell ist ja mit folgender Änderung getan:
Java:
error = new BufferedReader(new InputStreamReader(p.getErrorStream(), "cp1250"));
input = new BufferedReader(new InputStreamReader(p.getInputStream(), "cp1250"));

Gruß
BK
 
Zuletzt bearbeitet:
Danke für die Hilfe, nun erhalte ich einmal ein „ und einemal wieder das ?

Code:
Systemfehler 85 aufgetreten.

Der lokale Ger„tename wird bereits verwendet.

Code:
Der Befehl wurde erfolgreich ausgef?hrt.

Könnte es eventuell an etwas anderem noch liegen? Oder könnte mein deutsches XP SP 3 irgendwo einen anderen Zeichensatz verwenden?
 
Hi,

habe hier einen Artikel gefunden, der dein Problem am unteren Ende der Seite kurz anschneidet. Verwendest du Eclipse? Hast du es einmal direkt über die Konsole auch probiert?

Eventuell hilft dir ja der Codeausschnitt auf der Seite weiter.

Gruß
BK
 
Hi,

Windows arbeitet nicht mit UTF-8, sondern mit cp1250.
Das ist nur teilweise richtig und hängt natürlich von den Einstellungen bzw. der Sprachversion ab.

Windows verwendet nämlich 3 Zeichensätze:

1. intern und für Unicode Anwendungen UTF-16
2. in ANSI Anwendungen eine ANSI Codepage (z.B. CP1252)
3. in der Konsole eine andere Codepage (z.B. CP850)

Man kann die verwendete Codepage in der Konsole mit dem Programm "chcp" anzeigen bzw. ändern.

Code:
> chcp
Active code page: 850
> chcp 65001 
Active code page: 65001
Die besten Resultate erzielt man, wenn man eine Truetype Schriftart (z.B. Lucida Console) verwendet und die Codepage auf UTF-8 stellt (65001). Dabei können die meisten Zeichen angezeigt werden.

Gruß
 
Zurück