2012-03-21 29 views
14

Hola y gracias por leer mi publicación.Compilación (javac) de un código fuente Java codificado en UTF8 con una lista de materiales

Mi problema es el siguiente: quiero compilar un archivo fuente Java con "javac" con este archivo codificado en UTF-8 con una lista de materiales (el SO es WinXP).

continuación es lo que hago:

1) Crear un archivo con "Bloc de notas" y seleccione la codificación UTF-8

dos> notepad Test.java 
"File -> Save as..." 
File name : Test.java 
Save as type: All Files 
Encoding : UTF-8 
Save 

2) Crear una clase Java en ese archivo y se guarda el archivo como en 1)

public class Test 
{ 
    public static void main(String [] args) 
    { 
     System.out.println("This is a test."); 
    } 
} 

3) Visualizar la versión hexadecimal del archivo (primera línea)

dos> xxd Test.java | head -1 
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class 

Nota: ef bb bf es la codificación UTF-8 BOM (la lista de materiales UTF-16 codificada ser FE FF).

4) Intente compilar este código con "javac"

dos> javac -encoding utf8 Test.java 
Test.java:1: illegal character: \65279 
?public class Test 
^ 
1 error 

Nota: es la versión decimal de la lista de materiales.

Mi pregunta es la siguiente: ¿cómo puedo hacer este trabajo compilar con:

  • manteniéndola codificación UTF-8
  • y mantener la lista de materiales?

Gracias por ayudar y saludos cordiales.

Léa

+4

Así es: debe eliminar la lista de materiales. No tiene ningún problema en UTF-8, por lo que es un error. Este es un error de Microsoft de larga data. ¡Nunca pongas un BOM en UTF-8! – tchrist

+0

Hola. Gracias por su respuesta. Utilicé "Notepad ++" para codificar el archivo como "UTF8 sin BOM". La compilación del código con "javac" ahora funciona. –

+3

@tchrist [El estándar Unicode (página 30)] (http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf) permite una lista de materiales en UTF-8, por lo que tiene todo el derecho a ponerla allí si así lo deseas. Por qué querrías es otra historia, pero 'javac' debería manejarla. – ArtB

Respuesta

20

Recorte la lista de materiales y luego usar javac -encoding utf8 x.java

14

esto no es un problema con el editor de texto, que es un problema con javac! La especificación Unicode dice que BOM es opcional en UTF-8, ¡no dice que está prohibido! Si una lista de materiales puede estar allí, entonces javac TIENE que manejarlo, pero no es así. En realidad, usar la BOM en archivos UTF-8 ES útil para distinguir un archivo codificado ANSI de un archivo codificado en Unicode.

La solución propuesta para eliminar la lista de materiales es solo una solución y no la solución adecuada.

Este informe de error indica que este "problema" no se fijará: http://bugs.java.com/view_bug.do?bug_id=4508058

Dado que este hilo no está en los 2 primeros resultados de Google de la búsqueda "javac lista de materiales", Me voy esta aquí para futuros lectores .

Cuestiones relacionadas