«imposible de cartografiar de caracteres para la codificación de» advertencia en Java

Actualmente estoy trabajando en un proyecto Java que emite la siguiente advertencia al compilar:

/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 va a representar el carácter antes de la fecha, pero debe 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 personaje aparece en la salida del artefacto 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 incorrecta…

¿Cómo puedo inyectar este personaje en el «copyright» de la cadena para que el compilador es feliz, y el símbolo se conserva en el archivo sin el potencial de re-codificación de los problemas?

  • estar interesado en saber realmente qué bytes hacer hasta que los derechos de autor del personaje, es decir, hexdump AppDBCore.java dudo de su \u00a9 y en su lugar es algo que funciona parcialmente para usted debido a la configuración del sistema. La interrogante anterior se utiliza para reemplazar un carácter entrante cuyo valor es desconocido o irrepresentable en Unicode hexutf8.com/…
InformationsquelleAutor seanhodges | 2009-01-21

11 Kommentare

  1. 52

    Utilizar el «\uxxxx» escapar de formato.

    Según Wikipedia, el símbolo de derechos de autor es unicode U+00A9 para su línea debe leer:

    String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
    • Tenga cuidado con \uNNNN personajes… son analizados antes de realizar el análisis léxico. Por ejemplo, si usted pone este comentario /* c:\unit */ en el código, no va a compilar, porque «nit» no es correcto número hexadecimal.
    • Absolutamente. (Este es mejor manejado en C#, donde unicode escapar sólo se aplica en ciertos contextos – pero entonces hay el peligro \x de la secuencia de escape así, que es horrible.)
    • Excelente, el escape formato que funcionó muy bien. Gracias Jon!
    • Esto suena más como una banda la ayuda de un cura. El verdadero problema parece ser que estás diciendo javac esperar que los archivos de origen en UTF-8 cuando realmente están en un solo byte de codificación, como la ISO-8859-1 o windows-1252.
    • M: En mi experiencia, es mucho más fácil para asegurarse de que usted no tendrá un problema al mantener los archivos de origen en ASCII que es para asegurarse de que el uso de la codificación del derecho en todas partes su fuente puede ser compilado (Ant, Eclipse, IDEA, etc).
    • La edad de Siete bits de la Solución, seguro. Pero de codificación de caracteres de los problemas de los cultivos en muchos otros contextos, también. Cada desarrollador tiene que tener una buena comprensión de las cuestiones involucradas.
    • Sí, cada desarrollador debe saber acerca de las codificaciones etc. Eso no significa que sea una buena idea para causar problemas en los que no tienes que. Yo prefiero el código portable donde no tenía para elegir la codificación (como casi todo lo que es el ASCII-friendly).
    • eso es un error fundamental en Java; el hecho de que el código fuente Java unidad está codificado en UTF-8, ISO 8859-1, CP1252, MacRoman, o lo que sea, es tratada en los metadatos externos a la fuente de la unidad que necesita. Esto obliga a recordar para arreglar sus hormiga archivo o Eclipse config, etc. Como señalan acertadamente, esto es absolutamente la peor manera de hacerlo, porque la info es frágil y se pierde fácilmente. Idiomas que mantener los metadatos (codificación de metadatos) y los datos (lectura: el código fuente) en un solo lugar son mucho más robustos en el este. Es el único cuerdo enfoque.
    • Quiero votar más de una vez
    • Visita responder stackoverflow.com/a/26491769/649451

  2. 89

    Probar con:
    javac -codificación ISO-8859-1 file_name.java

    • Me gusta esta solución. He añadido «de la codificación UTF-8» como un compilerarg en mi hormiga build.xml y todavía se me pone la «advertencia: imposible de cartografiar de caracteres para la codificación ASCII». Si puedo modificar a «-codificación jjjj» no va a compilar, quejándose de «error: no admitidos de codificación: jjjj», por lo que yo sé es reconocer UTF-8, pero aún así parece ser tratados .archivos de java como ascii. Suspiro.
    • He probado la «codificación» de los parámetros de la hormiga javac tarea, mismo problema. Reconoce el parámetro, pero luego la ignora de alguna manera.
    • usted tiene que agregar <compilerarg line="-encoding utf-8"/> en virtud de la ley <javac> de llamada en tu Build.xml archivo. Esta es una mala manera de hacerlo, pero no tienes elección. Ver mi comentario largo en la parte superior.
    • Tuve el mismo problema cuando he añadido el compilearg en el hormiguero script funcionaba bien, estaba novación esto desde un windows comandline, el extraño thig es que yo estaba novación de eclipse es warked eaven withowt la compilearg, parece que eclipse thakes cuidado de la codificación del derecho.
    • Esto me ayudó 🙂 para MAC OSX
    • Esto me ha ayudado mucho!! Este sitio web [ docs.oracle.com/cd/B19306_01/server.102/b14225/ch2charset.htm ] también muestra las diferencias entre la codificación de caracteres conjuntos, ASCII tiene columnas de 0-7, ISO-8859-1 tiene columnas de 0 a 7 y A-F
    • you rock!!!
    • Se trata de un eclipse problema de visita responder stackoverflow.com/a/26491769/649451
    • Gracias Fernando, me ayudó 🙂

  3. 41

    Si usted está usando Maven, establecer el <encoding> explícitamente en el compilador del plugin de configuración, por ejemplo,

    <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>
    • Este es el enfoque correcto si la gente está utilizando maven para construir su proyecto, gracias por compartir.
    • Me ayudó mucho, gracias!
    • muy útil, gracias.
    • El javadoc plugin también se quejan de que el carácter imposible de cartografiar. Es preferible establecer project.build.sourceEncoding de la propiedad.
    • yo estaba usando ya el proyecto.construir.sourceEncoding de la propiedad, pero de alguna manera no se asigne correctamente en el compilador de codificación de la propiedad. Establecer explícitamente hizo el truco
  4. 20

    poner esta línea en el archivo .gradle por encima de la de Java conf.

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

    La mayoría de las veces este error de compilación viene cuando unicode(codificado en UTF-8) archivo de compilación de

    javac -encoding UTF-8 HelloWorld.java

    y también puede agregar esta opción de compilación para su IDE
    ex: Intellij idea

    (Archivo>configuraciones>Compilador de Java) agregar adicionales como parámetro de línea de comandos

    de codificación : de codificación
    Establecer el archivo de origen nombre de codificación, tales como la EUC-JP y UTF-8.. Si la codificación no se especifica, la plataforma por defecto converter. (DOC)

  6. 4

    Gradle Pasos

    Si usted está usando Gradle, a continuación, usted puede encontrar la línea que se aplica el plugin de java:

    apply plugin: 'java'

    A continuación, establezca la codificación para la compilación de la tarea a ser UTF-8:

    compileJava {options.encoding = "UTF-8"}   

    Si usted tiene pruebas de unidad, entonces usted probablemente desea compilar aquellos con UTF-8 también:

    compileTestJava {options.encoding = "UTF-8"}

    General Gradle Ejemplo

    Esto significa que, en general, gradle código sería algo como esto:

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

    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>
  8. 1

    Si usas eclipse (Eclipse puede poner utf8 código para usted, incluso de escribir de caracteres utf8. Usted verá normal utf8 carácter cuando la programación, pero de fondo se utf8 código) ;

    1. Seleccione Proyecto
    2. Haga clic derecho y seleccione Propiedades
    3. Seleccione de Recursos en Panel de Recursos(parte Superior del menú de la derecha, que se abrió después de que 2.)
    4. Se puede ver en Panel de Recursos, Archivo de Texto de Codificación, seleccione otro que desea

    P. S : esto va a aceptar si valor estático de código. Por Ejemplo la Cadena de prueba = «IIIIIııııııççççç»;

    • Su descripción de la «verá normal [a] utf8 carácter cuando [se] de programación, pero [el] fondo será utf8 código» no tiene ningún sentido. También, ver a mi largo comentario en respuesta a la pregunta anterior.
    • He cambiado a ISO-8859-1, pero todavía tiene un error de compilación sobre «imposible de cartografiar de caracteres para la codificación UTF8».
  9. 1

    Tuve el mismo problema, donde el personaje índice reportado en el error de java fue el mensaje incorrecto. Yo se redujo a la doble cita personajes justo antes de que el reporte de la posición que se hex 094 (cancelar lugar de la cita, pero representado como una cita) en lugar de la hexagonal 022. Tan pronto como cambié por el hexagonal 022 variante fue todo bien.

  10. 1

    Si uno está usando Maven Construir desde la línea de comandos se puede utilizar el siguiente comando:

                        mvn -Dproject.build.sourceEncoding=UTF-8

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea