2009-12-01 7 views
5

Quando provo quanto segue in Java:codifica CP1252

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

ottengo cp1252 come la codifica.

C'è un modo per sapere da dove proviene questo valore? (Come variabili di ambiente o qualcosa del genere)

Vorrei stampare il valore della codifica al prompt dei comandi utilizzando un comando come systeminfo su Windows XP.

+0

Eventuali informazioni correlate sono disponibili all'indirizzo http://stackoverflow.com/questions/1336930/how-do-you-specificare-a-java-file-encoding-value-consistent-with-the-underlying-wind –

+0

just fyi, http://cp1252.com ha alcune informazioni sulla codepage di vedove 1252 –

risposta

-1

Credo che questa codifica è impostata dalla JVM in modo che non avrebbe senso per recuperare dall'esterno

+0

No, è no, questa è una codifica di Windows per gli strumenti da riga di comando –

+1

Kico: no, non lo è. La codepage utilizzata sulla riga di comando è ancora diversa. – Joey

3

Tale valore è, su Windows, almeno, la tabella di codici legacy utilizzato per il testo non Unicode. È ciò che il sistema operativo converte stringhe da e verso quando si utilizzano le vecchie API ANSI. Per qualsiasi programma più recente, lo dovrebbe avere senza alcun effetto (detto questo, vedo ancora abbastanza programmi che utilizzano le varianti A e non le varianti W delle funzioni API, purtroppo).

Per il tuo programma Java niente di tutto ciò dovrebbe avere importanza, poiché Java utilizza esclusivamente Unicode. Se si desidera scrivere o leggere file di testo nella codepage del sistema, è comunque necessario.

Per il prompt dei comandi, tuttavia, la codifica non ha alcun valore significativo, poiché la console utilizza per impostazione predefinita la codifica OEM che imita quella dell'età DOS (850 o 437 è piuttosto comune).

5

cp1252 è la codifica predefinita per le installazioni inglesi di MS Windows (che Microsoft definisce ANSI). Java per impostazione predefinita prenderà le impostazioni internazionali del sistema come codifica dei caratteri predefinita. Ciò significa che dipende dal sistema. In generale, non mi piace affidarmi alle codifiche predefinite. Se so che il mio testo sarà puro ASCII, lo ignorerò, altrimenti imposto esplicitamente la codifica durante l'istanziazione di InputStreamReader, OutputStreamWriter, String ecc. O chiamando getBytes.

Nota che cp1252 è non la codifica predefinita sul prompt dei comandi di Windows. Questo è il cp437 ancora più vecchio, che puoi vedere (e modificare) usando il comando chcp.

1

Dal momento che questo in realtà non ha nulla a che fare con Java, si può solo scegliere di utilizzare uno script WSH:

' 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 

Vedi anche il comando chcp; si consiglia di leggere su come funziona la codifica sul prompt dei comandi di Windows (some links in this blog post).

+0

grazie mcdowell, questo è stato utile – Arun

0

Per quanto ho scoperto, questa è la codifica del file sorgente Java, l'output cambierà una volta modificata la codifica del file di testo. In eclissi, modificalo dalla proprietà Risorsa (Alt + Invio o tasto destro del mouse su quel file, vai a Risorsa). Cambia la codifica del file di testo da cp1252 a qualcos'altro, ad esempio UTF-8, woo ... L'output non sarà più cp1252 ..