Подтвердить что ты не робот

Недопустимый символ при попытке скомпилировать код 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
4b9b3361

Ответ 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
  1. Откройте новый файл Notepad.exe

В Блокноте

4. Menu -> Edit -> Paste
5. Menu -> Edit -> Select All
6. Menu -> Edit -> Copy 

Назад В Android Studio

7. Menu -> Edit -> Paste