Tengo un proyecto de maven, la codificación de caracteres se establece como UTF-8 en la casa de mis padres pom.

    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.3.2</version>
      <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>

Pero en el archivo Java, algunos personajes como ` or ha sido utilizado y que es causa de error de compilación para mí.

En el Eclipse (Propiedades—-Recursos —–Archivo de Texto y codificación de Windows-preferencias—área de trabajo—archivo de texto de codificación), he especificado la codificación UTF-8. Por favor, hágamelo saber cómo este problema puede ser resuelto.

CÓDIGO EN PERL PARA HACER LA CONVERSIÓN COSAS

use strict;
use warnings;
use File::Find;
use open qw/:std :utf8/;

my $dir = "D:\files";


find({ wanted => \&collectFiles}, "$dir");

sub collectFiles {
    my $filename = $_;
        if($filename =~ /.java$/){
        #print $filename."\n";
        startConversion($filename);
    }
}

sub startConversion{
    my $filename = $_;
    print $filename."\n";
    open(my $INFILE,  '<:encoding(cp1252)',  $filename) or die $!;
    open(my $OUTFILE, '>:encoding(UTF-8)', $filename) or die $!;
}
  • Has comprobado que el archivo de la causa de la excepción es, de hecho, codificado en UTF-8?
  • Por favor, tenga en cuenta que hay 3000 archivos java presente en mi proyecto, de modo que ir manualmente a cada archivo y guardarlo en codificación utf no es el camino correcto. Hay un script en perl para resolver este problema
  • cuando el archivo en el bloc de notas++, puedo ver el hightlight en «codificar en ANSI», así que creo que no se guarda en el formato UTF-8
  • Puede usted aclarar qué caracteres se han utilizado incorrectamente? Es ` y doble ` ?
  • Si sabes Java, ¿por qué no escribir en Java? No debería ser demasiado difícil. De lo contrario, consulte superuser.com/questions/69091/…
  • mensaje de error de compilación «error: imposible de cartografiar de caracteres para la codificación UTF8»
  • Empecé a escribir un script en perl que como no estoy familiarizado con Java. use strict; use warnings; el uso de File::Find; el uso abierto de qw/:std :utf8/; mi $dir = «D:\files»; find({ querían => \&collectFiles}, «$dir»); sub collectFiles { my $filename = $_; if($filename =~ /.java$/){ #print $nombre.»\n»; startConversion($filename); } } sub startConversion{ my $filename = $_; print $nombre.»\n»; open(mi $INFILE, ‘<:codificación(cp1252)’, $nombre_archivo) or die $!; abierto(mi $OUTFILE, ‘>:codificación(UTF-8)’, $nombre_archivo) or die $!; }
  • pero el guión es la sustitución de todo el contenido en el código de java y no funciona como se espera. Cualquier idea sobre el tema
  • Puesto que el código de la pregunta, y re-etiqueta con Perl. Estás preguntando por qué un script en perl que no funciona. Esto no ha mucho que ver con Java.
  • ` es válido ASCII/UTF-8, lo que puede que tenga que buscar en otra parte el problema de caracteres. Por qué no simplemente averiguar qué personaje de la codificación de los archivos están en y establecerlo como el tipo de codificación en Eclipse. Su pom.xml puede permanecer define como UTF-8 ‘causa me cabe duda de que va a tener cualquier no-ASCII, caracteres
  • código perl se ha añadido, la charcter presente es ` y». este está presente en todo el 3000 archivos en javadocs
  • al compilar el ` charcters son representados como �
  • ` es la misma en UTF-8, Windows 1252, ISO-8859 y ASCII. Su conversión no hacer nada.
  • hacer u significa que la conversión de cp1252 el predeterminado de windows en formato utf-8 no se soluciona el problema. La razón por la que me parece que la codificación es cp1252 es porque alguien que había cometido el código que estaba teniendo el predeterminado eclipse de codificación de texto de configuración como cp1252 que yo cree que es la causa raíz de este problema
  • «está causando el error de compilación para mí» no es una muy buena descripción de un problema. Qué error, para empezar?
  • ¿Tiene usted ‘ o `? Su aspecto es casi idéntico en algunos de fuente.
  • Sí he comprobado ….He » y ` en mi javadocs … yo Entiendo que la razón por la que estoy recibiendo un error de compilación apesar de mi codificación utf-8 es porque la codificación, que fue creado en eclipse es cp1252….por favor, corrija si mi underanding está mal
  • Uno de los puntos que me debe llevar a todos a notar es que —cuando abro el archivo en el bloc de notas++..el punto culminante de la codificación de punto a ansi ….
  • Esta es la razón por la que empecé a pensar en la modificación de la codificación de cada java archivo a utf-8 con un script en perl ….¿hay algo malo en mi enfoque de la
  • Lo siento, he usado\\sí mismo ..se me perdió mientras copiarlo aquí …..También he comprobado que yo era capaz de ver todos los archivos java presentes en ese directorio …..Yo soy capaz de tocar todos los archivos presentes….pero después de ejecutar la secuencia de comandos …todo el código java en los archivos se sobrescriben y ..se convierte archivos en blanco

InformationsquelleAutor user2604052 | 2013-08-15

2 Comentarios

  1. 1

    Estas dos líneas no iniciar o realizar la re-codificación:

    open(my $INFILE,  '<:encoding(cp1252)',  $filename) or die $!;
    open(my $OUTFILE, '>:encoding(UTF-8)', $filename) or die $!;

    Abrir un archivo con > trunca, que elimina el contenido. Ver el abrir documentación para más detalles.

    Lugar, usted tiene que leer los datos desde el primer archivo (el cual decodifica), y escribir en otro archivo (que automáticamente se codifica). Debido a que la fuente y el archivo de destino son idénticos aquí, y debido a las peculiaridades del manejo de archivos en Windows, debemos escribir nuestra salida a un archivo temporal:

    use autodie;  # automatic error handling :)
    
    open my $in,  '<:encoding(cp1252)', $filename;
    open my $out, '>:encoding(UTF-8)', "$filename~";  # or however you'd like to call the tempfile
    print {$out} $_ while <$in>;  # copy the file, recoding it
    close $_ for $in, $out;
    
    rename "$filename~" => $filename;  # BEWARE: doesn't work across logival volumes!

    Si los archivos son lo suficientemente pequeños (sugerencia: código fuente, normalmente lo es), entonces también se puede cargar en la memoria:

    use File::Slurp;
    
    my $contents = read_file $filename, { binmode => ':encoding(cp1252)' };
    write_file $filename, { binmode => ':encoding(UTF-8)' }, $contents;
    • Muchas gracias ….Voy a probarlo y seguramente vamos a saber los resultados
    • Así que esto significa que la escritura perl fue, de hecho, el enfoque correcto para atacar este problema ….como ~3000 archivos están involucrados
    • No sé, como no me creo que la re-codificación de un archivo iba a ser necesario en virtud de la configuración predeterminada, o si no, los caracteres no ASCII se utiliza. Mi respuesta sólo señala cómo su actual script en Perl que pudo haber sido.
    • Sí estás en lo correcto ….esto no es necesario si hemos de seguir la codificación utf-8 desde el principio de un proyecto de la misma…….pero en mi caso ya que los archivos están en formato ansi …..Creo que este debería de pasar de ansi a utf-8 y, por tanto, resolver el error de compilación
  2. 0

    Si estás en Linux o Mac OS X, puede utilizar iconv para convertir archivos a UTF-8. Java 1.7 no permitir la no-caracteres utf8, pero Java 1.6 hace (aunque se produce una advertencia). Lo sé porque tengo Java 1.7 en mi Mac, y yo no puedo compilar algunos de nuestro código debido a esto, mientras que los usuarios de Windows y de nuestro Linux acumulación continua de la máquina puede porque aún con el uso de Java 1.6.

    El problema con el script de Perl es que tienes que abrir un archivo para lectura y el mismo archivo para escritura, pero usted está utilizando el mismo nombre de archivo. Cuando se abre el archivo para escritura, se elimina su contenido.

    #! /usr/bin/env perl
    use warnings;
    use strict;
    use feature qw(say);
    
    use File::Find;
    
    use strict;
    use warnings;
    use autodie;
    
    use constant  {
        SOURCE_DIR       => 'src',
    };
    
    
    my @file_list;
    find {
        next unless -f;
        next unless /\.java$/;
        push $file_list, $File::Find::name;
    }, SOURCE_DIR;
    
    for my $file ( @file_list ) {
        open my $file_fh, "<:encoding(cp1252)", $file;
        my @file_contents = <$file_fh>;
        close $file_fh;
    
        open my $file_fh, ">:encoding(utf8)", $file;
        print {$file_fh} @file_contents;
        close $file_fh;
    }

    Nota que me estoy leyendo todo el archivo en la memoria que debe ser de acuerdo con el código fuente de Java. Incluso un gigantesco archivo de origen (10.000 líneas de largo, con un promedio de longitud de la línea de 120 caracteres) será de poco más de 1.2 megabytes. A menos que usted está usando un TRS-80, I a 1.2 mb archivo no debería ser un problema de memoria. Si se quiere ser estricto al respecto, el uso de File::Temp para crear un archivo temporal en la que escribir, y, a continuación, utilizar File::Copy para cambiar el nombre de ese archivo temporal. Ambos son estándar módulos de Perl.

    Puedes también se adjunta el programa completo en el find subrutina demasiado.

Dejar respuesta

Please enter your comment!
Please enter your name here