2011-07-18 15 views
10

estoy teniendo problema con el archivo de salida de un programa usando Eclipse .i puesto mi Eclipse a UTF-8 y consalida como codificación UTF-8 en Java

System.getProperty("file.encoding") 

i obtener RAN UTF-8.i mi prog a través de la opción de ejecución Eclipse y la salida (un archivo de texto) está codificada en UTF-8.pero cuando comprimí el código fuente en un archivo jar, el archivo de salida muestra un error en algunos del alfabeto como Ã.what es con esto difiere cuando se rutea el prog en eclipse y el archivo frm jar? y tengo que especificar el resultado que se codificará en utf-8 en mi código fuente? pls help.

ayuda de @dacwe efectivamente producido la deseada output.but se puede saber cómo puedo ejecutar mi ejecutable .jar archivo fuera de línea de comandos ¿cómo puede el -Dfile.encoding = UTF-8

@dacwe:? I intentado cambiar mi código fuente en

BufferedWriter bout = new java.io.BufferedWriter(new java.io.OutputStreamWriter(
       new java.io.FileOutputStream(filename), "UTF-8")); 

pero la salida todavía no está codificado correctly.anything i falta aquí?

+0

posible duplicado de [? Ajuste el valor por defecto de Java codificación de caracteres] (http : //stackoverflow.com/questions/361975/setting-the-default-java-character-encoding) – dacwe

+1

¡No hagas eso! Deje de configurar las variables de entorno o las propiedades del sistema para establecer la codificación que se usará. Todas las clases relevantes en Java tienen constructores que toman la codificación. Especifique la codificación correcta allí y nunca más tendrá que confiar en la configuración externa. –

+0

@dacwe no mencioné ningún uso de System.setProperty ("file.encoding", "UTF-8") en mi código fuente. Al ejecutar mi código a través de eclipse, la ejecución siempre produce el resultado deseado (archivo UFF-8 codificado) pero no en el archivo .jar. – reukEN11

Respuesta

1

Cuando ejecuta desde un archivo JAR está configurando la propiedad file.encoding por -Dfile.encoding? Si no, puede

a) abra la secuencia explícitamente con esa codificación. para esto, deberá crear un OutputStream y luego ajustarlo en un OutputStreamWriter que indique explícitamente la codificación de caracteres.

o

b) establezca la propiedad como la primera cosa en su principal método usando System.setProperty ("file.endcoding");

nota @dacwe señaló algo que olvide ... corrigió mi respuesta.

+0

b) no es correcto. Debe establecer 'file.encoding' antes de que se inicie JVM (se almacena en caché, por ejemplo,' String' y 'OutputStreamWriter' ..). – dacwe

+0

@dacwe utilizo la exportación como archivo .jar de eclipse para comprimir mi código fuente. ¿Cómo puedo configurar esta propiedad? Miro en eclipse y tiene un archivo .ini, con -Dfile.encoding = UTF-8 en el último línea (manualmente desde el tutorial hasta establecer ide en utf). – reukEN11

+0

@ reukEN11: * Si no usa su código fuente en el programa, no tiene nada que ver con el origen. * Comience su aplicación desde un shell con: 'java -Dfile.encoding = UTF-8 -jar your-jar- file.jar'. – dacwe

10

¡Después de una discusión importante en la respuesta de @Dave G!

El uso de java -Dfile.encoding=UTF-8 -jar your-jar-file.jar funciona.

Actualizar su código como @Dave G sugerido (y su edición) debería funcionar.

  • ¿De verdad ha reempaquetado su jar?
  • ¿Llama al close() en bout? (Por ejemplo, puede que el archivo no se actualiza)

Aquí es un ejemplo completo que pudiera conseguir que va:

public static void main(String... args) throws Exception { 
    PrintWriter out = new PrintWriter(new File("hello.txt"), "UTF-8"); 
    out.print("written in utf-8"); 
    out.close(); 
} 
+0

he reempaquetado el archivo.jar después de cada cambio en mi código fuente para determinar el resultado y también se agregó bout.close(). No funciona, excepto cuando se usa console.and ¿cuál es el problema con mi BufferedWriter? – reukEN11

+0

@ reukEN11: no hay problema con su 'BufferedWriter'. Solo quería escribir un ejemplo conciso. Si lees archivos necesitas usar la codificación correcta allí también. – dacwe

+0

@dacwei see.so cambié mybufferedwriter para incluir específicamente el set de char.repackaged y ejecutar, pero el problema aún existe. Lo seguiré intentando. – reukEN11