2011-01-28 17 views
5

Mi problema se explica mejor con un ejemplo: El siguiente programa es ejecutado en un sistema Linux que es no en modo Unicode aún, pero en ISO-8859-15. El entorno se establece de la siguiente manera: [email protected]Java:. Runtime.getRuntime exec()() pasa argumentos en Unicode cuando debería no

import java.io.*; 
import java.util.*; 

public class UnicodeTest { 
    public static void main(String[] args) throws Exception { 
      Runtime.getRuntime().exec(new String[] { "foobar", "äöü" }); 
    } 
} 

Cuando puedo compilar este programa en la línea de comandos usando javac y ejecutarlo, foobar obtiene el argumento äöü correctamente, en la norma ISO-8859-1. El mismo programa, ejecutado desde Netbeans, pasa el argumento como Unicode, lo que lo hace inutilizable en el programa llamado. Lo mismo ocurre en Tomcat cuando se llama a ese método. ¿Qué configuración o variable de entorno usa Java para determinar cómo pasar argumentos en Runtime.exec()?

+0

"cuando no debería" - no es tan redundante. ¿Alguna vez quisieras que los pase incorrectamente? ;) ¿Has comprobado cómo netbeans guarda tu archivo? Netbeans usa javac para hacer la compilación, por lo que debe compilar la misma. –

+0

Peter: Gracias, corrigió el título. Comprobaré si Netbeans crea los mismos archivos de clase, supongo que sí. –

+0

comprobado eso. Ejecutar desde Netbeans genera un resultado incorrecto. La ejecución del mismo archivo de clase (creado por Netbeans) en la línea de comando genera el resultado correcto. –

Respuesta

1

Lo encontraste. El comportamiento está controlado por la propiedad del sistema file.encoding. Netbeans lo establece en UTF-8. En la línea de comando, es ISO-8859-15.

Cuestiones relacionadas