Actualmente estoy trabajando en un proyecto Java que emite la siguiente advertencia cuando compilo:
/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
No estoy seguro de cómo SO representará el carácter antes de la fecha, pero debería ser un símbolo de derechos de autor y se muestra en la advertencia como un signo de interrogación en un diamante.
Vale la pena señalar que el carácter aparece en el artefacto de salida correctamente, pero las advertencias son una molestia y el archivo que contiene esta clase puede que algún día sea tocado por un editor de texto que guarde la codificación incorrectamente ...
¿Cómo puedo inyectar este carácter en la cadena "copyright" para que el compilador esté contento y el símbolo se conserve en el archivo sin posibles problemas de recodificación?
hexdump AppDBCore.java
, de alguna manera dudo que sea\u00a9
y, en cambio, es algo que funciona parcialmente para usted debido a la configuración de su sistema. El signo de interrogación anterior se usa para reemplazar un carácter entrante cuyo valor es desconocido o irrepresentable en Unicode hexutf8.com/…Respuestas:
Utilice el formato de escape "\ uxxxx".
Según Wikipedia , el símbolo de derechos de autor es unicode U + 00A9, por lo que su línea debería leer:
fuente
Pruebe con: javac -encoding ISO-8859-1 file_name.java
fuente
<compilerarg line="-encoding utf-8"/>
debajo de la<javac>
llamada correspondiente en suBuild.xml
archivo. Esta es una mala forma de hacerlo, pero no tiene otra opción. Vea mi comentario largo en la parte superior.Si está utilizando Maven, establezca
<encoding>
explícitamente en la configuración del complemento del compilador, por ejemplofuente
project.build.sourceEncoding
propiedad.Esto me ayudó:
Fuente: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
fuente
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
luego, cuando lo ejecuté, no necesité agregar esa parte de codificación adicional.ponga esta línea en su archivo .gradle arriba de la configuración de Java.
fuente
compileTestJava
yjavadoc
asíLa mayoría de las veces, este error de compilación se produce cuando se compila un archivo Unicode (codificado en UTF-8).
y también puede agregar esta opción de compilación a su IDE, por ejemplo: Intellij idea
(Archivo> configuración> Compilador de Java) agregar como parámetro de línea de comando adicional
fuente
Pasos de Gradle
Si está utilizando Gradle, puede encontrar la línea que aplica el complemento de Java:
Luego, configure la codificación para la tarea de compilación en UTF-8:
Si tiene pruebas unitarias, probablemente también desee compilarlas con UTF-8:
Ejemplo general de Gradle
Esto significa que el código general de Gradle se vería así:
fuente
Esto funcionó para mí
fuente
Si usa eclipse (Eclipse puede poner código utf8 para usted incluso si escribe el carácter utf8. Verá el carácter utf8 normal cuando programe, pero el fondo será el código utf8);
PD: esto estará bien si tiene un valor estático en el código. Por ejemplo, String test = "İİİİİıııııççççç";
fuente
Tuve el mismo problema, donde el índice de caracteres informado en el mensaje de error de Java era incorrecto. Lo reduje a los caracteres de comillas dobles justo antes de que la posición informada fuera hexadecimal 094 (cancelar en lugar de citar, pero representada como una cita) en lugar de hexadecimal 022. Tan pronto como cambié por la variante hexadecimal 022, todo estuvo bien.
fuente
Si uno está usando Maven Build desde el símbolo del sistema, también puede usar el siguiente comando:
fuente
Para aquellos que se preguntan por qué sucede esto en algunos sistemas y no en otros (con la misma fuente, parámetros de compilación, etc.), verifique su
LANG
variable de entorno . Recibo la advertencia / error cuandoLANG=C.UTF-8
, pero no cuandoLANG=en_US.UTF-8
.fuente