Как скомпилировать исходный файл java, который кодируется как "UTF-8"?
Я сохранил исходный файл Java, указав его тип кодировки как UTF-8 (используя Notepad, по умолчанию тип кодировки Notepad - ANSI), а затем я попытался скомпилировать его, используя:
javac -encoding "UTF-8" One.java
но он дал сообщение об ошибке
One.java:1: illegal character: \65279
?public class One {
^
1 error
Есть ли другой способ, я могу скомпилировать это?
Вот источник:
public class One {
public static void main( String[] args ){
System.out.println("HI");
}
}
Ответы
Ответ 1
Ваш файл читается как UTF-8, иначе символ со значением "65279" никогда не появится. javac
ожидает, что ваш исходный код будет находиться в кодировке по умолчанию платформы, согласно документации javac
:
Если параметр -encoding не указан, используется конвертер по умолчанию платформы.
Десятичный 65279 - это шестнадцатеричный FEFF, который является Unicode Byte Order Mark (BOM). Это не нужно в UTF-8, потому что UTF-8 всегда кодируется как поток октетов и не имеет проблем с контентом.
Notepad любит придерживаться спецификаций, даже если они не нужны, но некоторые программы не любят их находить. Как отмечали другие, Notepad - не очень хороший текстовый редактор. Переключение на другой текстовый редактор почти наверняка решит вашу проблему.
Ответ 2
Откройте файл в Notepad ++ и выберите Encoding → Convert to UTF-8 без спецификации.
Ответ 3
Это не проблема с вашим текстовым редактором, это проблема с javac!
Спецификация Unicode говорит, что спецификация в UTF-8 полезна, она не говорит, что это запрещено!
Если спецификация может быть там, то javac HAS для ее обработки, но это не так. Фактически, использование спецификации в файлах UTF-8 полезно для того, чтобы отличать ANSI-кодированный файл от кодированного в Юникоде файла.
Предлагаемое решение об удалении спецификации является лишь обходным решением, а не правильным решением.
Этот отчет об ошибке указывает, что эта "проблема" никогда не будет исправлена: http://bugs.java.com/view_bug.do?bug_id=4508058
Поскольку этот поток находится в двух лучших результатах Google для поиска "javac BOM", я оставляю это здесь для будущих читателей.
Ответ 4
Попробуйте javac -encoding UTF8 One.java
Без кавычек и UTF8 без тире.
См. эту тему в форуме для дополнительных ссылок
Ответ 5
Я знаю, что это очень старый поток, но у меня возникла аналогичная проблема с PHP вместо Java, и Google взял меня здесь. Я писал PHP на Notepad ++ (не простой Notepad) и заметил, что лишняя белая строка появляется каждый раз, когда я вызываю файл include. Firebug показал, что в этих дополнительных строках был 65279 символов.
Собственно, основной файл PHP и включенные файлы были закодированы в UTF-8. Однако Notepad ++ также имеет возможность кодировать как "UTF-8 без спецификации". Это решило мою проблему.
Нижняя строка: кодировка UTF-8 вставляет здесь и там этот дополнительный символ спецификации, если вы не указали своему редактору использовать UTF8 без спецификации.
Ответ 6
См. ниже
Например, мы можем обсудить с Программой (слова телугу)
Программа (UnicodeEx.java)
class UnicodeEx {
public static void main(String[] args) {
double ఎత్తు = 10;
double వెడల్పు = 25;
double దీర్ఘ_చతురస్ర_వైశాల్యం;
System.out.println("The Value of Height = "+ఎత్తు+" and Width = "+వెడల్పు+"\n");
దీర్ఘ_చతురస్ర_వైశాల్యం = ఎత్తు * వెడల్పు;
System.out.println("Area of Rectangle = "+దీర్ఘ_చతురస్ర_వైశాల్యం);
}
}
Это программа при сохранении как "UnicodeEx.java" и изменение кодировки на "unicode"
** Как скомпилировать **
javac -encoding "unicode" UnicodeEx.java
Как выполнить
java UnicodeEx
Значение высоты = 10,0 и ширина = 25,0
Область прямоугольника = 250.0
Ответ 7
Хорошо работает здесь, даже редактируется в Блокноте. Мораль истории - не используйте Блокнот. Там, вероятно, нецензурный персонаж, который Блокнот либо вставляет, либо счастливо скрывается от вас.
Ответ 8
У меня была та же проблема. Чтобы решить проблему, он открыл файл в шестнадцатеричном редакторе и обнаружил три "невидимых" байта в начале файла. Я удалил их, и компиляция сработала.
Ответ 9
-
Откройте файл с помощью WordPad или любого другого редактора, кроме Notepad.
-
Выберите тип "Сохранить как" как текстовый документ - формат MS-DOS
-
Повторно открыть проект
Ответ 10
Чтобы расширить существующие ответы с помощью решения для пользователей Linux:
Чтобы удалить спецификацию во всех файлах .java
сразу, перейдите в исходный каталог и выполните
find -iregex '.*\.java' -type f -print0 | xargs -0 dos2unix
Требуется установить find
, xargs
и dos2unix
, которые должны быть включены в большинство дистрибутивов. Первый оператор находит все .java
файлы в текущем каталоге рекурсивно, второй преобразует каждый из них с помощью инструмента dos2unix
, который предназначен для преобразования окончаний строк, а также удаляет спецификацию.
Преобразование окончаний строк не должно иметь никакого эффекта, поскольку оно должно быть уже в формате Linux \n
для Linux, если вы правильно настроили управление версиями, но будьте осторожны, если это произойдет, если у вас есть один из тех редких случаев, когда это не предназначено.
Ответ 11
В Intellij Idea ("Настройки"> "Редактор"> "Кодировки файлов") кодировкой проекта была "windows-1256". Поэтому я использовал следующий код для преобразования статических строк в utf8
protected String persianString(String persianStirng) throws UnsupportedEncodingException {
return new String(persianStirng.getBytes("windows-1256"), "UTF-8");
}
Теперь хорошо! В зависимости от кодировки файла вы должны изменить "windows-1256" на правильную