Как скомпилировать исходный файл java, который кодируется как "UTF-8"?
Я сохранил исходный файл Java, указав его тип кодировки как UTF-8 (используя Блокнот, по умолчанию тип кодировки Блокнота-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");
}
}
10 ответов:
Ваш файл читается как UTF-8, иначе символ со значением "65279" никогда не появится.
javac
ожидает, что ваш исходный код будет в кодировке платформы по умолчанию, согласно документацииjavac
:Если - кодировка не задана, используется конвертер платформы по умолчанию.
Десятичных 65279 шестигранной FЭФФ, который является метку порядка следования байтов Юникода (спецификации). Это не нужно в UTF-8, потому что UTF-8 всегда кодируется как поток октета и не имеет проблем с эндианностью.
Блокнот любит вставлять в спецификации, даже когда они не нужны, но некоторые программы не любят их находить. Как уже отмечали другие, Блокнот-не очень хороший текстовый редактор. Переключение на другой текстовый редактор почти наверняка решит вашу проблему.
Попробуйте
javac -encoding UTF8 One.java
Без кавычек и это UTF8, без тире.
Смотрите эту тему форума для получения дополнительных ссылок
Это не проблема с вашим текстовым редактором, это проблема с javac ! Спецификация Unicode говорит, что BOM является опциональным в UTF-8, но не говорит, что это запрещено ! Если BOM может быть там, то javac должен обрабатывать его, но это не так. На самом деле, использование BOM в файлах UTF-8 полезно, чтобы отличить файл с кодировкой ANSI от файла с кодировкой Unicode.
Предлагаемое решение удаления спецификации - это только обходной путь, а не правильное решение.
Этот отчет об ошибке указывает на то, что эта " проблема" никогда не будет исправлено: http://bugs.java.com/view_bug.do?bug_id=4508058
Поскольку эта тема находится в топ-2 результатов google для поиска "javac BOM", я оставляю это здесь для будущих читателей.
Я знаю, что это очень старый поток, но я испытывал аналогичную проблему с PHP вместо Java, и Google взял меня сюда. Я писал PHP на Notepad++ (не обычный блокнот) и заметил, что при каждом вызове include-файла появляется дополнительная белая строка. Firebug показал, что в этих дополнительных строках был символ 65279.
На самом деле и основной файл PHP, и включенные файлы были закодированы в UTF-8. Однако Notepad++ также имеет возможность кодировать как "UTF-8 без BOM". Это решило мою проблему.
Итог: кодировка UTF-8 вставляет здесь и там этот дополнительный символ BOM, если вы не прикажете редактору использовать UTF8 без BOM.
См. Ниже Например, мы можем обсудить с программой (Телугу слова)
Программа (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-кодировка" unicode " UnicodeEx.java
Как выполнить
Java UnicodeEx
Значение высоты = 10,0 и ширины = 25,0
Площадь прямоугольника = 250,0
Отлично работает здесь, даже отредактировано в блокноте. Мораль этой истории такова: Не используйте блокнот. Вероятно, там есть непечатный символ, который блокнот либо вставляет, либо счастливо скрывает от вас.
У меня была та же проблема. Для ее решения открыл файл в шестнадцатеричном редакторе и обнаружил три "невидимых" байта в начале файла. Я удалил их, и компиляция сработала.
Откройте файл с помощью WordPad или любого другого редактора, кроме Notepad.
Выберите Сохранить как тип как текстовый документ-формат MS-DOS
Откройте проект заново
Чтобы расширить существующие ответы с помощью решения для пользователей Linux :
Чтобы удалить спецификацию сразу для всех файлов
.java
, перейдите в исходный каталог и выполните команду
find -iregex '.*\.java' -type f -print0 | xargs -0 dos2unix
Требует
find
,xargs
иdos2unix
для установки, которая должна быть включена в большинство дистрибутивов. Первый оператор находит все файлы.java
в текущем каталоге рекурсивно, второй преобразует каждый из них с помощью инструментаdos2unix
, который предназначен для преобразования окончаний строк, но также и удаляет спецификацию.Преобразование окончаний строк не должно иметь никакого эффекта, как это уже должно быть в Linux
\n
формате на Linux, если вы правильно настроили свой контроль версий, но имейте в виду, что он делает это также в случае, если у вас есть один из тех редких случаев, когда это не предполагается.