2009-01-21 13 views
94

Actualmente estoy trabajando en un proyecto Java que emite la siguiente advertencia cuando compile:advertencia "carácter imposible de cartografiar para la codificación" en Java

/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 lo hace podría dañar el carácter antes la fecha, pero debe ser un símbolo de copyright, y se muestra en la advertencia como un signo de interrogación en un diamante.

Vale la pena señalar que el personaje aparece en el artefacto emite correctamente, pero las advertencias son una molestia y el archivo que contiene esta clase puede un día ser tocado por un editor de texto que guarda la codificación de forma incorrecta ...

¿Cómo puedo insertar este carácter en la cadena de "derechos de autor" para que el compilador esté contento y el símbolo se conserve en el archivo sin posibles problemas de recodificación?

+0

estar interesado en saber realmente lo que los bytes componen ese carácter de derechos de autor, es decir, 'hexdump AppDBCore.java' alguna manera dudo de su' \ u00a9' y en su lugar es algo eso 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 no se puede representar en Unicode_ http://hexutf8.com/?q=c2a9efbfbd20323030332d32303038204d7920436f6d70616e792e20416c6c207269676874732072657365727665642e – jar

Respuesta

48

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 debe decir:

String copyright = "\u00a9 2003-2008 My Company. All rights reserved."; 
+13

Tenga cuidado con los caracteres \ uNNNN ... se analizan antes de realizar el análisis léxico. Por ejemplo, si coloca este comentario/* c: \ unit */en su código, no compilará más, porque "nit" no es el número correcto. –

+3

Absolutamente. (Esto se maneja mejor en C#, donde el escape unicode solo se aplica en ciertos contextos, pero también está la peligrosa secuencia de escape x, que es horrible.) –

+0

Excelente, el formato de escape funcionó muy bien. Gracias Jon! – seanhodges

85

Pruebe con: javac -encoding ISO-8859-1 file_name.java

+1

Me gusta esta solución. Agregué "-encoding UTF-8" como un compilerarg en mi build.xml de hormiga y sigo recibiendo "advertencia: carácter no identificable para codificar ASCII". Si lo modifico en "-encoding jjjj" no compilará, quejándose "error: codificación no soportada: jjjj", entonces sé que está reconociendo UTF-8, pero parece que todavía se tratan los archivos .java como ascii. Suspiro. – dfrankow

+1

Probé el parámetro "codificación" de la tarea ant javac, el mismo problema. Reconoce el parámetro, pero luego lo ignora de alguna manera. – dfrankow

+19

@dfrankow: tiene que agregar '' bajo la llamada '' aplicable en su archivo 'Build.xml'. Esta es una mala forma de hacerlo, pero no tiene otra opción. Ver mi largo comentario en la parte superior. – tchrist

1

Si use eclipse (Eclipse puede poner el código utf8 incluso si escribe el carácter utf8. Verá el carácter utf8 normal al programar, pero el fondo será el código utf8);

  1. Seleccionar Proyecto
  2. clic derecho y seleccione Propiedades
  3. Seleccionar Recursos en Panel de Recursos (Parte superior de menú de la derecha después de que se abrió 2.)
  4. Se puede ver en Panel de recursos, Codificación de archivo de texto, seleccione otro que nt

P.S: esta voluntad bien si el valor estático en código. Por ejemplo, String test = "İİİİİııııııçççççç";

+1

Tu descripción de "Verás un carácter [a] utf8 normal cuando estás [programando] pero [el] fondo será código utf8 "no tiene sentido". Además, vea mi comentario largo en respuesta a la pregunta anterior. – tchrist

+0

Lo cambié a ISO-8859-1, pero todavía tengo un error de compilación sobre "carácter no identificable para codificar UTF8". – pacoverflow

1

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 hex 094 (cancelar en lugar de citar, pero representada como una cita) en lugar de hexadecimal 022. Tan pronto como cambié por la variante hex 022, todo estaba bien.

36

Si está utilizando Maven, configure el <encoding> explícitamente en la configuración del complemento del compilador, p.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <encoding>UTF-8</encoding> 
      </configuration> 
     </plugin> 
+0

Este es el enfoque correcto si las personas están utilizando maven para construir su proyecto, gracias por compartir. – Shamik

+0

me ayudó mucho, gracias! –

+0

muy útil, gracias. –

4

mayoría de las veces llega este error de compilación cuando Unicode (UTF-8 codificado) Archivo compilar

javac -encoding UTF-8 HelloWorld.java 

y también Puede agregar esta opción de compilación a su IDE ex: Intellij idea
(Archivo> Configuración> compilador Java) añadir parámetros como adicionales de línea de comandos

enter image description here

-encoding : encoding Set the source file encoding name, such as EUC-JP and UTF-8.. If -encoding is not specified, the platform default converter is used. (DOC)

1

Si uno está utilizando Maven Construir desde el símbolo del sistema se puede utilizar el siguiente comando así:

    mvn -Dproject.build.sourceEncoding=UTF-8 
14

ponga esta línea en su archivo .gradle encima de Java conf.

apply plugin: 'java' 
compileJava {options.encoding = "UTF-8"} 
1

Esto funcionó para mí -

<?xml version="1.0" encoding="utf-8" ?> 
<project name="test" default="compile"> 
    <target name="compile"> 
     <javac srcdir="src" destdir="classes" 
          encoding="iso-8859-1" debug="true" /> 
    </target> 
</project> 
Cuestiones relacionadas