Atualmente, estou trabalhando em um projeto Java que emite o seguinte aviso ao 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 o SO renderizará o caractere antes da data, mas deve ser um símbolo de copyright e é exibido no aviso como um ponto de interrogação em um losango.
É importante 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 esta classe pode um dia ser alterado por um editor de texto que salva a codificação incorretamente ...
Como posso injetar esse caractere na string de "direitos autorais" para que o compilador fique satisfeito e o símbolo seja preservado no arquivo sem possíveis problemas de recodificação?
hexdump AppDBCore.java
, de alguma forma duvido\u00a9
disso e, em vez disso, é algo que funciona parcialmente para você por causa da configuração do sistema. O ponto de interrogação acima é usado para substituir um caractere de entrada cujo valor é desconhecido ou não representável em Unicode hexutf8.com/…Respostas:
Use o formato de escape "\ uxxxx".
De acordo com a Wikipedia , o símbolo de direitos autorais é unicode U + 00A9, portanto, sua linha deve ser:
fonte
Tente com: javac -encoding ISO-8859-1 file_name.java
fonte
<compilerarg line="-encoding utf-8"/>
sob a<javac>
chamada aplicável em seuBuild.xml
arquivo. Esta é uma maneira ruim de fazer isso, mas você não tem escolha. Veja meu longo comentário no topo.Se você estiver usando o Maven, defina
<encoding>
explicitamente na configuração do plug-in do compilador, por exemplofonte
project.build.sourceEncoding
propriedade.Isso me ajudou:
Fonte: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
fonte
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
Então, ao executá-lo, não precisei adicionar aquela parte extra de codificação.coloque esta linha no seu arquivo .gradle acima do Java conf.
fonte
compileTestJava
e parajavadoc
tambémNa maioria das vezes, esse erro de compilação ocorre durante a compilação de arquivos Unicode (codificado em UTF-8)
e também você pode adicionar esta opção de compilação ao seu IDE ex: Intellij idea
(Arquivo> configurações> Compilador Java) adicionar como parâmetro de linha de comando adicional
fonte
Gradle Steps
Se você estiver usando o Gradle, poderá encontrar a linha que aplica o plug-in java:
Em seguida, defina a codificação da tarefa de compilação como UTF-8:
Se você tiver testes de unidade, provavelmente também deseja compilá-los com UTF-8:
Exemplo geral do Gradle
Isso significa que o código geral do Gradle seria mais ou menos assim:
fonte
Isso funcionou para mim -
fonte
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);
PS: isso vai funcionar se você valorar estático no código. Por exemplo String test = "İİİİİıııııııçççççç";
fonte
Eu tive o mesmo problema, onde o índice de caracteres relatado na mensagem de erro java estava incorreto. Eu reduzi para os caracteres de aspas duplas antes de a posição relatada ser hex 094 (cancelar em vez de aspas, mas representado como uma aspa) em vez de hex 022. Assim que troquei pela variante hex 022, tudo estava bem.
fonte
Se estiver usando o Maven Build a partir do prompt de comando, também poderá usar o seguinte comando:
fonte
Para aqueles que estão se perguntando por que isso acontece em alguns sistemas e não em outros (com a mesma fonte, parâmetros de construção e assim por diante), verifique sua
LANG
variável de ambiente . Recebo o aviso / erro quandoLANG=C.UTF-8
, mas não quandoLANG=en_US.UTF-8
.fonte