2009-12-01 13 views
5

Wenn ich folgend in Java versuchen:Encoding cp1252

System.out.println(System.getProperty("file.encoding"));

ich cp1252 als Codierung.

Gibt es eine Möglichkeit zu wissen, woher dieser Wert kommt? (Wie Umgebungsvariablen oder etwas)

Ich möchte den Wert der Codierung an der Eingabeaufforderung mit einem Befehl wie systeminfo unter Windows XP drucken.

+0

Möglicherweise in Verbindung stehende Information ist an http://stackoverflow.com/questions/1336930/How-Do-Sie-spezifizieren-ein-Java-Datei-Encoding-Wert-konsistent-mit-dem-zugrunde liegenden Wind –

+0

nur fyi, http://cp1252.com hat einige Informationen über Witwen Codepage 1252 –

Antwort

-1

Ich glaube, diese Codierung durch die JVM festgelegt ist, so dass es nicht sinnvoll, es draußen zu holen machen würde von

+0

Nein, es ist nicht, das ist eine Windows-Codierung für Kommandozeilen-Tools –

+1

Kico: Nicht, es ist nicht. Die in der Befehlszeile verwendete Codepage ist noch eine andere. – Joey

3

Dieser Wert ist, auf Windows zumindest das Vermächtnis Codepage für Nicht-Unicode-Text verwendet wird. Es ist das, was das Betriebssystem konvertiert, wenn Sie die alten ANSI-APIs verwenden. Für jedes neuere Programm sollte es haben keine Wirkung (das heißt, ich sehe immer noch genug Programme, die die A-und nicht die W-Varianten der API-Funktionen verwenden, leider).

Für Ihr Java-Programm sollte das alles egal sein, da Java ausschließlich Unicode verwendet. Wenn Sie Textdateien auf der Codepage des Systems schreiben oder lesen möchten, benötigen Sie sie jedoch.

Für die Eingabeaufforderung hat diese Codierung jedoch keinen signifikanten Wert, da die Konsole standardmäßig die OEM-Codierung verwendet, die das eine der DOS-Zeitalter nachahmt (850 oder 437 ist ziemlich üblich).

5

cp1252 ist die Standardcodierung bei englischen Installationen von MS Windows (was Microsoft als ANSI bezeichnet). Java verwendet standardmäßig das Systemgebietsschema als Standardzeichencodierung. Was das bedeutet ist systemabhängig. Generell bin ich nicht gerne auf Standardcodierungen angewiesen. Wenn ich weiß, dass mein Text reines ASCII ist, ignoriere ich es - andernfalls setze ich die Codierung explizit beim Instanziieren InputStreamReader, OutputStreamWriter, String etc oder Aufruf getBytes.

Beachten Sie, dass cp1252 nicht die Standardcodierung an der Windows-Eingabeaufforderung ist. Das ist der noch ältere CP437, den Sie mit dem Befehl chcp sehen (und ändern) können.

1

Da dies nicht wirklich etwas mit Java zu tun hat, können Sie nur entscheiden, einen WSH Skript zu verwenden:

' save this script as printANSI.vbs 
' usage: cscript /Nologo printANSI.vbs 
Set objShell = CreateObject("WScript.Shell") 
cp = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001" &_ 
           "\Control\Nls\CodePage\ACP") 
WScript.Echo cp 

Siehe auch den chcp Befehl; Vielleicht möchten Sie lesen, wie Codierung an der Windows-Eingabeaufforderung (some links in this blog post) funktioniert.

+0

danke mcdowell, das war nützlich – Arun

0

Soweit ich festgestellt habe, ist dies die Codierung Ihrer Java-Quelldatei, Ihre Ausgabe wird sich ändern, sobald Sie die Textdateicodierung ändern. Bei Eclipse, ändern Sie es von Ressource Eigenschaft (Alt + Enter oder Rechtsklick auf diese Datei, gehen Sie zu Ressource). Ändern Sie die Textdateicodierung von cp1252 zu etwas anderem, sagen UTF-8, woo ... Ihre Ausgabe wird cp1252 nicht länger sein.