В настоящее время я работаю над проектом 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 отобразит символ до даты, но он должен быть символом авторского права и отображаться в предупреждении как вопросительный знак в ромбе.
Стоит отметить, что символ отображается в выходном артефакте правильно, но предупреждения доставляют неудобства, и файл, содержащий этот класс, может однажды быть затронут текстовым редактором, который неправильно сохраняет кодировку ...
Как я могу вставить этот символ в строку «авторских прав», чтобы компилятор был доволен и символ сохранился в файле без потенциальных проблем с перекодированием?
12 ответов
Используйте escape-формат «\ uxxxx».
Согласно Wikipedia, символом авторского права является код Юникода U + 00A9, поэтому ваша строка должна гласить:
String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
Попробуйте: javac -encoding ISO-8859-1 имя_файла.java
<compilerarg line="-encoding utf-8"/>
под соответствующим вызовом <javac>
в вашем файле Build.xml
. Это плохой способ, но у вас нет выбора. Смотрите мой длинный комментарий вверху.
Если вы используете 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>
project.build.sourceEncoding
.
Мне это помогло:
Все, что вам нужно сделать, это указать переменную окружения под названием JAVA_TOOL_OPTIONS. Если вы установите для этой переменной значение -Dfile.encoding = UTF8, каждый раз, когда запускается JVM, она будет получать эту информацию.
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
Затем при запуске мне не нужно было добавлять эту дополнительную часть кодирования.
Поместите эту строку в свой файл .gradle над Java conf.
apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
compileTestJava
, а также для javadoc
Шаги Gradle
Если вы используете 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"}
Это сработало для меня -
<?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>
Если вы используете eclipse (Eclipse может поместить для вас код utf8, даже если вы пишете символ utf8. При программировании вы увидите нормальный символ utf8, но в качестве фона будет код utf8);
- Выберите Проект .
- Щелкните правой кнопкой мыши и выберите Свойства .
- Выберите Ресурс на панели ресурсов (меню вверху справа, которое открывается через 2.)
- Вы можете увидеть на панели ресурсов , Кодировка текстового файла , выбрать другой, который вы хотите
P.S: это нормально, если вы используете статическое значение в коде. Например, String test = "İİİİİııııııççççç";
Если вы используете Maven Build из командной строки, вы также можете использовать следующую команду:
mvn -Dproject.build.sourceEncoding=UTF-8
Тем, кто задается вопросом, почему это происходит в одних системах, а не в других (с тем же источником, параметрами сборки и т. Д.), проверьте переменную среды LANG
. Я получаю предупреждение / ошибку при LANG=C.UTF-8
, но не при LANG=en_US.UTF-8
.
В большинстве случаев эта ошибка компиляции возникает при компиляции файла в кодировке unicode (кодировка UTF-8).
javac -encoding UTF-8 HelloWorld.java
А также вы можете добавить эту опцию компиляции в свою IDE Пример: идея Intellij
(Файл> Настройки> Компилятор Java) добавить в качестве дополнительного параметра командной строки
-encoding: кодировка Задайте имя кодировки исходного файла, например EUC-JP и UTF-8. Если -encoding не указан, используется конвертер по умолчанию для платформы. (DOC)
У меня была та же проблема, когда индекс символа, указанный в сообщении об ошибке Java, был неверным. Я сузил его до символов двойных кавычек непосредственно перед тем, как сообщаемая позиция была шестнадцатеричной 094 (отмена вместо кавычки, но представленная как кавычка) вместо шестнадцатеричного 022. Как только я поменял местами на шестнадцатеричный вариант 022, все было в порядке.
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].
hexdump AppDBCore.java
Я как-то сомневаюсь в его\u00a9
, и вместо этого это что-то, что работает частично для вас из-за настройки вашей системы. Вышеупомянутый вопросительный знак используется для замены входящего символа, значение которого неизвестно или не представляется в Юникоде hexutf8.com/…