Предупреждение "unamappable character for encoding" в Java

В настоящее время я работаю над проектом 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", чтобы компилятор был доволен, и символ сохраняется в файле без каких-либо проблем с повторным кодированием?

Ответ 1

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

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

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

Ответ 2

Попробуйте: javac -encoding ISO-8859-1 file_name.java

Ответ 3

Если вы используете 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>

Ответ 4

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

Все, что вам нужно сделать, это указать переменную envirnoment, называемую 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/

Ответ 5

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

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

Ответ 6

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

javac -encoding UTF-8 HelloWorld.java

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

enter image description here

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

Ответ 7

Если вы используете eclipse (Eclipse может поместить код utf8 для вас, даже вы напишите символ utf8. При программировании вы увидите обычный символ utf8, но фон будет кодом utf8);

  • Выберите Проект
  • Щелкните правой кнопкой мыши и выберите Свойства
  • Выберите Ресурс в панели ресурсов (верхнее правое меню, которое открывается после 2).
  • Вы можете увидеть в Панели ресурсов, Кодировка текстовых файлов, выберите другую, которую вы хотите

P.S:, это будет нормально, если вы статичное значение в коде. Для примера String test = "İİİİİııııııııççççç";

Ответ 8

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

Ответ 9

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

                    mvn -Dproject.build.sourceEncoding=UTF-8

Ответ 10

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

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