¿Cómo comstackr un archivo fuente java codificado como “UTF-8”?

Guardé mi archivo fuente Java especificando su tipo de encoding como UTF-8 (usando el Bloc de notas, por defecto el tipo de encoding del Bloc de notas es ANSI) y luego traté de comstackrlo usando:

javac -encoding "UTF-8" One.java 

pero dio un mensaje de error ”

 One.java:1: illegal character: \65279 ?public class One { ^ 1 error 

¿Hay alguna otra manera, puedo comstackr esto?

Aquí está la fuente:

 public class One { public static void main( String[] args ){ System.out.println("HI"); } } 

Su archivo se lee como UTF-8, de lo contrario, un personaje con el valor “65279” nunca podría aparecer. javac espera que su código fuente esté en la encoding predeterminada de la plataforma, de acuerdo con la documentación de javac :

Si no se especifica la encoding , se utiliza el convertidor predeterminado de la plataforma.

El decimal 65279 es hexadecimal FEFF, que es la marca de orden de bytes Unicode (BOM) . No es necesario en UTF-8, porque UTF-8 siempre está codificado como una secuencia de octetos y no tiene problemas de endianness.

Al bloc de notas le gusta incluir listas de materiales incluso cuando no son necesarias, pero a algunos progtwigs no les gusta encontrarlas. Como han señalado otros, Notepad no es un editor de texto muy bueno. Cambiar a un editor de texto diferente seguramente resolverá su problema.

Abra el archivo en Notepad ++ y seleccione Codificación -> Convertir a UTF-8 sin BOM.

Prueba javac -encoding UTF8 One.java

Sin las comillas, es UTF8, sin guiones.

Ver este hilo del foro para más enlaces

Esto no es un problema con su editor de texto, ¡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í, javac TIENE que manejarla, 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” nunca será reparado: http://bugs.java.com/view_bug.do?bug_id=4508058

Como este hilo se encuentra en los primeros 2 resultados de búsqueda de google “javac BOM”, lo dejo aquí para futuros lectores.

Sé que este es un hilo muy antiguo, pero estaba experimentando un problema similar con PHP en lugar de Java y Google me llevó hasta aquí. Estaba escribiendo PHP en Notepad ++ (no en el Bloc de notas simple) y noté que aparecía una línea blanca extra cada vez que llamaba a un archivo de inclusión. Firebug mostró que había un personaje de 65279 en esas líneas adicionales.

En realidad, tanto el archivo PHP principal como los archivos incluidos estaban codificados en UTF-8. Sin embargo, Notepad ++ también tiene una opción para codificar como “UTF-8 sin BOM”. Esto resolvió mi problema.

En pocas palabras: la encoding UTF-8 inserta aquí y allá este carácter BOM extra a menos que le indique a su editor que use UTF8 sin BOM.

Ver abajo Por ejemplo, podemos discutir con un progtwig (palabras en telugu)

Progtwig (UnicodeEx.java)

 class UnicodeEx { public static void main(String[] args) { double ఎత్తు = 10; double వెడల్పు = 25; double దీర్ఘ_చతురస్ర_వైశాల్యం; System.out.println("The Value of Height = "+ఎత్తు+" and Width = "+వెడల్పు+"\n"); దీర్ఘ_చతురస్ర_వైశాల్యం = ఎత్తు * వెడల్పు; System.out.println("Area of Rectangle = "+దీర్ఘ_చతురస్ర_వైశాల్యం); } } 

Este es el progtwig al guardar como “UnicodeEx.java” y cambiar la encoding a “unicode”

** Cómo comstackr **

javac -encoding “unicode” UnicodeEx.java

Cómo ejecutar

java UnicodeEx

El valor de la altura = 10.0 y el ancho = 25.0

Área de Rectángulo = 250.0

Funciona bien aquí, incluso editado en el Bloc de notas. Moraleja de la historia es, no use Notepad. Es probable que haya un personaje no imprimible allí que el Bloc de notas se esté insertando o escondiéndose feliz de usted.

Yo tuve el mismo problema. Para resolverlo, abrió el archivo en un editor hexadecimal y encontró tres bytes “invisibles” al principio del archivo. Los eliminé y la comstackción funcionó.

  • Abra su archivo con WordPad o cualquier otro editor, excepto el Bloc de notas.

  • Seleccione Guardar como tipo como documento de texto – Formato de MS-DOS

  • Reabrir el proyecto

Para ampliar las respuestas existentes con una solución para usuarios de Linux :

Para eliminar la lista de materiales en todos los archivos .java a la vez, vaya a su directorio de origen y ejecute

find -iregex '.*\.java' -type f -print0 | xargs -0 dos2unix

Requiere find , xargs y dos2unix para ser instalado, lo cual debería incluirse en la mayoría de las distribuciones. La primera statement encuentra todos los archivos .java en el directorio actual recursivamente, el segundo convierte cada uno de ellos con la herramienta dos2unix , que pretende convertir los finales de línea pero también elimina la lista de materiales.

La conversión de finales de línea no debería tener ningún efecto, como debería ser en formato Linux \n en Linux si configuras correctamente tu control de versiones, pero ten en cuenta que también lo hace en caso de que tengas uno de esos raros casos en los que no se pretende .