предупреждение "не отображаемый символ для кодирования" в Java - PullRequest
101 голосов
/ 21 января 2009

Я сейчас работаю над проектом Java, который выдает следующее предупреждение при компиляции:

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

Я не уверен, как SO будет отображать символ до даты, но он должен быть символом авторского права и отображаться в предупреждении в виде знака вопроса в ромбе.

Стоит отметить, что символ правильно отображается в выходном артефакте, но предупреждения являются неприятностью, и файл, содержащий этот класс, может однажды коснуться текстового редактора, который неправильно сохраняет кодировку ...

Как я могу вставить этот символ в строку "copyright", чтобы компилятор был доволен, и символ сохранился в файле без потенциальных проблем перекодировки?

Ответы [ 11 ]

88 голосов
/ 25 октября 2009

Попробуйте с: javac-кодирование ISO-8859-1 имя_файла.java

52 голосов
/ 21 января 2009

Используйте escape-формат "\ uxxxx".

Согласно Википедии , символом авторского права является Unicode U + 00A9, поэтому ваша строка должна выглядеть так:

String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
40 голосов
/ 28 мая 2012

Если вы используете Maven, установите <encoding> явно в конфигурации плагина компилятора, например,

<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>
29 голосов
/ 13 февраля 2014

Это помогло мне:

Все, что вам нужно сделать, это указать переменную окружения, которая называется JAVA_TOOL_OPTIONS. Если вы установите эту переменную в -Dfile.encoding = UTF8, каждый раз, когда JVM запускается, он получает эту информацию.

Источник: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/

20 голосов
/ 14 сентября 2015

поместите эту строку в ваш файл .gradle выше Java conf.

apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}   
7 голосов
/ 05 апреля 2015

В большинстве случаев эта ошибка компиляции возникает при компиляции файла Unicode (в кодировке UTF-8)

javac -encoding UTF-8 HelloWorld.java

, а также вы можете добавить эту опцию компиляции в вашу IDE пример: интеллигентная идея
(Файл> Настройки> Компилятор Java) добавьте в качестве дополнительного параметра командной строки

enter image description here

-кодирование: кодировка Задайте имя кодировки исходного файла, например EUC-JP и UTF-8. Если -encoding не указан, используется конвертер по умолчанию для платформы. ( DOC )

3 голосов
/ 21 октября 2018

Gradle Steps

Если вы используете Gradle, вы можете найти строку, которая применяет плагин Java:

apply plugin: 'java'

Затем установите кодировку для задачи компиляции в UTF-8:

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

Если у вас есть модульные тесты, то вы, вероятно, захотите скомпилировать их и с UTF-8:

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

Общий пример Gradle

Это означает, что общий код gradle будет выглядеть примерно так:

apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
2 голосов
/ 30 апреля 2017

Это сработало для меня -

    <?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>
1 голос
/ 24 июня 2015

Если вы используете Maven Build из командной строки, можно также использовать следующую команду:

                    mvn -Dproject.build.sourceEncoding=UTF-8
1 голос
/ 22 июня 2010

У меня была та же проблема, где индекс символов, указанный в сообщении об ошибке Java, был неверным. Я сузил его до двойных кавычек непосредственно перед тем, как сообщаемая позиция была шестнадцатеричной 094 (отмена вместо кавычки, но представлена ​​в виде кавычки) вместо шестнадцатеричной 022. Как только я поменял местами вариант с шестнадцатеричной 022, все было в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...