2009-12-01 29 views
5

Cuando intento el siguiente en Java:codificación CP1252

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

me sale cp1252 como la codificación.

¿Hay alguna manera de saber de dónde viene este valor? (Como variables de entorno o algo así)

Me gustaría imprimir el valor de la codificación en el símbolo del sistema usando algún comando como systeminfo en Windows XP.

+0

Posiblemente la información relacionada esté en http://stackoverflow.com/questions/1336930/how-do-you-specify-a-java-file-encoding-value-consistent-with-the-underlying-wind –

+0

solo fyi, http://cp1252.com tiene información sobre las viudas codepage 1252 –

Respuesta

-1

Creo que esta codificación se establece por la JVM por lo que no tendría sentido para recuperarlo desde fuera

+0

No, es no, esta es una codificación de Windows para herramientas de línea de comandos –

+1

Kico: No, no lo es. La página de códigos utilizada en la línea de comando todavía es diferente. – Joey

3

Ese valor es, en Windows, al menos, la página de códigos legado utilizado para el texto no Unicode. Es a lo que el sistema operativo convierte cadenas desde y hacia cuando usa las antiguas API de ANSI. Para cualquier programa más nuevo es si no tiene ningún efecto (dicho esto, todavía veo suficientes programas que usan las variantes A y no W de las funciones API, lamentablemente).

Para usted el programa Java nada de eso debería importar, ya que Java usa Unicode exclusivamente. Si desea escribir o leer archivos de texto en la página de códigos del sistema, entonces lo necesitará.

Para el símbolo del sistema, sin embargo, esa codificación no tiene ningún valor significativo, ya que la consola utiliza de manera predeterminada la codificación OEM que imita la de las edades de DOS (850 o 437 es bastante común).

5

cp1252 es la codificación predeterminada en las instalaciones en inglés de MS Windows (lo que Microsoft denomina ANSI). Java de forma predeterminada tomará la configuración regional del sistema como su codificación de caracteres predeterminada. Lo que esto significa es dependiente del sistema. En general, no me gusta confiar en las codificaciones predeterminadas. Si sé que mi texto será puro ASCII, lo ignoro; de lo contrario, configuro la codificación explícitamente al crear instancias de InputStreamReader, OutputStreamWriter, String etc. o llamando al getBytes.

Tenga en cuenta que cp1252 es no la codificación predeterminada en el símbolo del sistema de Windows. Ese es el cp437 aún más antiguo, que puede ver (y cambiar) usando el comando chcp.

1

Dado que esto realmente no tiene nada que ver con Java, usted podría optar por usar un 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 

Ver también el comando chcp; Es posible que desee leer sobre cómo funciona la codificación en el símbolo del sistema de Windows (some links in this blog post).

+0

gracias mcdowell, esto fue útil – Arun

0

Por lo que he descubierto, esta es la codificación de su archivo fuente java, su salida cambiará una vez que cambie la codificación de su archivo de texto. En eclipse, cámbielo de la propiedad del recurso (Alt + Intro o haga clic con el botón derecho en ese archivo, vaya a Recurso). Cambie la codificación del archivo de texto de cp1252 a otra cosa, digamos UTF-8, woo ... Su salida ya no será cp1252 ..