Подтвердить что ты не робот

Ошибка: unmappable символ для кодирования UTF8 во время компиляции maven

Я компилирую пакет с использованием maven, и он говорит о сбое сборки при следующей ошибке компиляции:

SpanishTest.java [31, 81] unmappable символ для кодирования UTF8

Я искал в Интернете и для многих людей, меняя исходную кодировку с UTF-8 на ISO-8859-1, похоже, работает, но я все еще получаю такую ​​же ошибку компиляции. Я использую 32-разрядный Ubuntu. Вот как этот тег выглядит в моем pom.xml

<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>

Даже если я изменяю тег <project.build.outputEncoding> на ISO-8859-1, я все равно получаю ошибку. Может быть, из-за версии java? У меня есть и sun-java, и openjdk, установленные в моей системе.

Может кто-нибудь, пожалуйста, дайте мне знать, что делать.

Спасибо

4b9b3361

Ответ 1

Настроить плагин maven-compiler для использования той же кодировки символов, что ваши исходные файлы закодированы (например):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

Многие плагины maven по умолчанию будут использовать свойство "project.build.sourceEncoding", поэтому настройка этого в вашем pom будет охватывать большинство плагинов.

<project>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
...

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

Когда ваш исходный код скомпилирован плагином maven-compiler, ваши файлы исходного кода считываются плагином компилятора, используя любую кодировку, с которой настроен плагин компилятора. Если исходные файлы имеют другую кодировку, чем использует плагин компилятора, возможно, некоторые символы могут не существовать в обоих кодировках.

Многие предпочитают устанавливать кодировку в своих исходных файлах на UTF-8, чтобы избежать этой проблемы. Для этого в Eclipse вы можете щелкнуть правой кнопкой мыши по проекту и выбрать "Свойства- > Ресурс- > Текстовое кодирование файлов" и изменить его на UTF-8. Это будет кодировать все исходные файлы в UTF-8. (Вы также должны явно настроить maven-compiler-plugin, как указано выше, для использования кодировки UTF-8.) С исходными файлами и плагином компилятора с использованием той же кодировки во время компиляции у вас не должно быть более неустранимых символов.

Примечание. Вы также можете установить кодировку файлов во всем мире затмения через Window- > Preferences- > General- > Workspace- > Text File Encoding. Вы также можете установить кодировку для каждого типа файла с помощью Window- > Preferences- > General- > Content Types.

Ответ 2

Если приведенный выше ответ не работает, измените кодировку на cp1252 или вручную удалите все вхождения специального символа. Для меня специальный символ вызывал проблему, которая находилась внутри блока комментариев.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>2.3.2</version>
   <configuration>
       <encoding>Cp1252</encoding>
   </configuration> 
</plugin>

PS: Я использовал GNU/Linux OS (Ubuntu).

Ответ 3

Я столкнулся с этой проблемой только сейчас и в итоге решил это так: я открыл нарушительный файл .java в Notepad ++ и из меню Encoding выбрал "Convert to UTF-8 без спецификации". Сохраненный. Повторно запустил maven, все прошло хорошо.

Если злоумышленник не был закодирован в UTF-8, как вы настроили для своего плагина компилятора maven, вы увидите в меню кодирования Np ++ отметку маркера рядом с текущей кодировкой файла (в моем случае я видел это было установлено значение "Encode in ANSI" ).

Итак, ваш плагин maven-компилятор вывел Java-компилятор с параметром -encoding, установленным в UTF-8, но компилятор обнаружил исходный файл с кодировкой ANSI и сообщил об этом как об ошибке. Ранее это было предупреждение в Java 5, но оно рассматривается как ошибка в Java 6 +

Ответ 4

Это происходит в следующем сценарии:  При работе в Windows среда IDE более чем вероятно настроена для редактирования файлов на Cp1252, которая является адаптацией к компьютеру для латинского языка 11. Разработчик проверяет, и сервер Continuous Integration (обычно работающий на Linux, который в настоящее время является всем utf8) подбирает файл и пытается скомпилировать его как файл UTF-8, поэтому предупреждение.

Попробуйте изменить кодировку на cp1252. Это работает. Чтобы избежать будущих проблем такого типа, используйте ту же самую кодировку на всех машинах разработчика.

Удачи...

Ответ 5

Я тоже столкнулся с подобной проблемой, и мое решение было иным. Я пошел на указанную строку и перешел к персонажу (для SpanishTest.java [31, 81] перейдите к 31-й строке и 81-му символу, включая пробелы). Я заметил апостроф в комментарии, который вызывал проблему. Хотя это и не ошибка, компилятор maven сообщает о проблеме, и в моем случае было возможно удалить maven "незаконный" символ.. lol.

Ответ 6

Когда я проверяю консоль, я обнаружил, что версия maven-компилятора - 2.5.1, но в другой части я пытаюсь построить свой проект с maven 3.2.2. Так после написания точной версии в pom.xml, он работает хорошо, Вот полный тег:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.2</version>
  <configuration>
   ....
  <configuration>
</plugin>

Ответ 7

В моем случае я решил эту проблему, используя такой подход:

  • Установить новую переменную среды: JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
  • Или установите MAVEN_OPTS= -Dfile.encoding=UTF-8