Ошибка: 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, установленные в моей системе.
Может кто-нибудь, пожалуйста, дайте мне знать, что делать.
Спасибо
Ответы
Ответ 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