Недопустимый символ при попытке скомпилировать код Java
У меня есть программа, которая позволяет пользователю вводить java-код в текстовое поле, а затем компилировать его с помощью java-компилятора. Всякий раз, когда я пытаюсь скомпилировать код, который я написал, я получаю сообщение об ошибке, в котором говорится, что у меня есть незаконный символ в начале моего кода, которого нет. Это ошибка, которую компилятор мне дает:
C:\Users\Travis Michael>"\Program Files\Java\jdk1.6.0_17\bin\javac" Test.java
Test.java:1: illegal character: \187
public class Test
^
Test.java:1: illegal character: \191
public class Test
^
2 errors
Ответы
Ответ 1
Спецификация создается, например, File.WriteAllText() или StreamWriter, если вы не указали кодировку. По умолчанию используется кодировка UTF8 и создается спецификация. Вы можете сообщить компилятору java об этом с помощью параметра командной строки -encoding.
Путь наименьшего сопротивления состоит в том, чтобы избежать создания спецификации. Сделайте это, указав System.Text.Encoding.Default, который напишет файл с символами на кодовой странице по умолчанию вашей операционной системы и не будет писать спецификацию. Используйте перегрузку File.WriteAllText(String, String, Encoding) или конструктор StreamWriter (String, Boolean, Encoding).
Просто убедитесь, что созданный вами файл не скомпилируется машиной в другом уголке мира. Он произведет mojibake.
Ответ 2
Это знак байтового порядка, как все говорят.
javac не понимает спецификацию, даже когда вы пытаетесь что-то вроде
javac -encoding UTF8 Test.java
Вам нужно снять спецификацию или преобразовать исходный файл в другую кодировку. Notepad ++ может преобразовывать единую кодировку файлов, для этого я не знаю о пакетной утилите на платформе Windows.
Компилятор java предполагает, что файл находится в кодировке по умолчанию для платформы, поэтому, если вы используете это, вам не нужно указывать кодировку.
Ответ 3
http://en.wikipedia.org/wiki/Byte_order_mark
Знак порядка байтов (BOM) - это Unicode символ, используемый для endianness (порядок байтов) текстового файла или поток. Его кодовая точка U + FEFF. Использование спецификации необязательно, и, если используется, должен появиться в начале текста поток. Помимо его конкретного использования в качестве байт-указатель, спецификация символ может также указывать, какой из несколько представлений Unicode текст закодирован.
BOM - это забавный вид, который вы иногда находите в начале потоков Unicode, давая понять, что такое кодировка. Он обычно обрабатывает невидимые элементы обработки строк в Java, поэтому вы должны каким-то образом смутить его, но, не видя своего кода, трудно увидеть, где.
Возможно, вы сможете устранить его тривиально, вручную удалив спецификацию из строки перед ее подачей на javac
. Вероятно, он квалифицируется как пробел, поэтому попробуйте называть trim()
на входной строке и подавать вывод этого значения на javac
.
Ответ 4
Я решил это, щелкнув правой кнопкой мыши в своем программном файле textEdit и выбрав [замены] и отключив смарт-кавычки.
Ответ 5
- Если вы используете IDE, укажите кодировку java файла (через панель свойств)
- Если НЕ использовать IDE, используйте расширенный текстовый редактор (я могу рекомендовать Notepad ++) и установить кодировку в "UTF без спецификации" или "ANSI", если это вам подходит.
Ответ 6
Это проблема, связанная с типом BOM (Byte Order Mark). Байт-указатель BOM является символом Юникода, который используется для определения порядка байтов текстового файла и входит в начало файла. Eclipse не разрешает этот символ в начале вашего файла, поэтому вы должны его удалить. для этого используйте богатый текстовый редактор, например Notepad ++, и сохраните файл с кодировкой "UTF-8 без спецификации". Это должно устранить проблему.
I have copy pasted the some content from a website to a Notepad++ editor,
it shows the "LS" with black background. Have deleted the "LS" content and
have copy the same content from notepad++ to java file, it works fine.
Ответ 7
вместо получения Notepad ++,
Вы можете просто
Откройте файл с помощью Wordpad
а потом
Сохранить как обычный документ
Ответ 8
Будьте абсолютно уверены, что вы пишете файл в той же кодировке символов, что и вы используете javac.
Ответ 9
Даже я столкнулся с этой проблемой, поскольку я использую notepad ++ для кода. Очень удобно вводить код в блокноте ++. Однако после компиляции я получаю сообщение об ошибке "error: незаконный символ: '\ u00bb".
Решение:
Начните писать код в старой версии блокнота (который будет по умолчанию на вашем ПК) и сохраните его. Позже изменения могут быть сделаны с помощью notepad ++.
Он работает!!!
Ответ 10
В Android Studio
1. Menu -> Edit -> Select All
2. Menu -> Edit -> Copy
- Откройте новый файл Notepad.exe
В Блокноте
4. Menu -> Edit -> Paste
5. Menu -> Edit -> Select All
6. Menu -> Edit -> Copy
Назад В Android Studio
7. Menu -> Edit -> Paste