it-swarm.dev

"caractere não mapeável para codificação" aviso em Java

Atualmente estou trabalhando em um projeto Java que está emitindo o seguinte aviso quando eu compilar:

/src/com/myco/apps/AppDBCore.Java:439: warning: unmappable character for encoding UTF8
    [javac]         String copyright = "� 2003-2008 My Company. All rights reserved.";

Não tenho certeza de como SO renderizará o caractere antes da data, mas ele deve ser um símbolo de direitos autorais e é exibido no aviso como um ponto de interrogação em um losango.

Vale a pena notar que o caractere aparece no artefato de saída corretamente, mas os avisos são um incômodo e o arquivo que contém essa classe pode um dia ser tocado por um editor de texto que salva a codificação incorretamente ...

Como posso injetar esse caractere na string "copyright" para que o compilador fique feliz e o símbolo seja preservado no arquivo sem possíveis problemas de recodificação?

102
seanhodges

Use o formato de escape "\ uxxxx".

De acordo com Wikipedia , o símbolo de copyright é unicode U + 00A9, então sua linha deve ler:

String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
52
Jon Skeet

Tente com: javac -coding ISO-8859-1 file_name.Java

88
Fernando Nah

Se você estiver usando o Maven, defina o <encoding> explicitamente na configuração do plug-in do compilador, por exemplo,.

<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>
40
Thomas Leonard

Isso ajudou para mim:

Tudo o que você precisa fazer é especificar uma variável de ambiente chamada Java_TOOL_OPTIONS. Se você definir essa variável como -Dfile.encoding = UTF8, toda vez que uma JVM for iniciada, ela coletará essas informações.

Fonte: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/

29
nightlyop

coloque esta linha no seu arquivo .gradle acima do Java conf.

apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}   
20
Alobes5

Na maioria das vezes, este erro de compilação ocorre quando a compilação de arquivos unicode (codificada em UTF-8)

javac -encoding UTF-8 HelloWorld.Java

e também Você pode adicionar esta opção de compilação à sua IDE ex: Intellij idea
(Arquivo> configurações> Compilador Java) adicionar como parâmetro de linha de comando adicional

enter image description here

- codificação: codificação Defina o nome da codificação do arquivo de origem, como EUC-JP e UTF-8 .. Se -coding não for especificado, o padrão da plataforma conversor é usado. ( DOC )

7
Alupotha

Etapas Gradle

Se você estiver usando Gradle, então você pode encontrar a linha que se aplica ao plugin Java:

apply plugin: 'Java'

Em seguida, defina a codificação para a tarefa de compilação como UTF-8:

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

Se você tiver testes de unidade, provavelmente também desejará compilá-los com o UTF-8:

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

Exemplo geral de graduação

Isso significa que o código geral do gradle seria algo parecido com isto:

apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
4
Luke Machowski

Isso funcionou para mim -

    <?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>
2
Dxx0

Se alguém estiver usando o Maven Build a partir do comando Prompt, também poderá usar o seguinte comando:

                    mvn -Dproject.build.sourceEncoding=UTF-8
1
5122014009

Se você usar o Eclipse (o Eclipse pode colocar o código utf8 para você mesmo que você escreva o caractere utf8. Você verá o caractere utf8 normal ao programar, mas o plano de fundo será o código utf8);

  1. Selecione Projeto
  2. Clique com o botão direito e selecione Propriedades
  3. Selecione Recurso em Painel de Recursos (menu superior direito que abriu depois de 2.)
  4. Você pode ver em Painel de Recursos, Text File Encoding, selecione outro que você quer

P.S: isso vai ok se você valor estático no código. Por exemplo String test = "İİİİİııııııççççç";

1
baybora.oren

Eu tive o mesmo problema, onde o índice de caracteres relatado na mensagem de erro Java estava incorreto. Eu reduzi-a aos caracteres de aspas duplas logo antes da posição relatada ser hexadecimal 094 (cancelar em vez de citar, mas representada como uma citação) em vez de hexadecimal 022. Assim que eu troquei pela variante hex 022 tudo estava bem.

1
Kelvin Goodson