error illegal character u00bb

У меня есть исходный код проекта Eclipse (мне сказали, что в Android Studio, может быть, они просто смущены), и я начинаю переносить код в студию Android, ссылаясь на

Но это не сработает. поэтому я напрямую импортирую проект из пути, и он автоматически переносится в проект Android-студии, но все-таки что-то не так, когда я компилирую.

Ошибка: (1, 1) error: disabledcharacter: ‘ ufeff’

позиция ошибки относится к

Пожалуйста, помогите мне, спасибо

Это проблема, связанная с типом BOM (Byte Order Mark). Знак порядка байтов BOM — это символ Юникода, используемый для определения порядка байтов текстового файла и входит в начало файла. Eclipse не разрешает этот символ в начале вашего файла, поэтому вы должны его удалить. Для этого используйте богатый текстовый редактор, например Notepad ++, и сохраните файл с кодировкой «UTF-8 без спецификации». Это должно устранить проблему.

У меня есть программа, которая позволяет пользователю вводить java-код в текстовое поле, а затем компилировать его с помощью java-компилятора. Всякий раз, когда я пытаюсь скомпилировать код, который я написал, я получаю сообщение об ошибке, в котором говорится, что у меня есть незаконный символ в начале моего кода, которого нет. Это ошибка, которую компилятор мне дает:

Спецификация создается, например, File.WriteAllText() или StreamWriter, если вы не указали кодировку. По умолчанию используется кодировка UTF8 и создается спецификация. Вы можете сообщить компилятору java об этом с помощью параметра командной строки -encoding.

Путь наименьшего сопротивления состоит в том, чтобы избежать создания спецификации. Сделайте это, указав System.Text.Encoding.Default, который напишет файл с символами на кодовой странице по умолчанию вашей операционной системы и не будет писать спецификацию. Используйте перегрузку File.WriteAllText(String, String, Encoding) или конструктор StreamWriter (String, Boolean, Encoding).

Просто убедитесь, что созданный вами файл не скомпилируется машиной в другом уголке мира. Он произведет mojibake.

Это знак байтового порядка, как все говорят.

javac не понимает спецификацию, даже когда вы пытаетесь что-то вроде

Вам нужно снять спецификацию или преобразовать исходный файл в другую кодировку. Notepad ++ может преобразовывать единую кодировку файлов, для этого я не знаю о пакетной утилите на платформе Windows.

Компилятор java предполагает, что файл находится в кодировке по умолчанию для платформы, поэтому, если вы используете это, вам не нужно указывать кодировку.

Знак порядка байтов (BOM) — это Unicode символ, используемый для endianness (порядок байтов) текстового файла или поток. Его кодовая точка U + FEFF. Использование спецификации необязательно, и, если используется, должен появиться в начале текста поток. Помимо его конкретного использования в качестве байт-указатель, спецификация символ может также указывать, какой из несколько представлений Unicode текст закодирован.

BOM — это забавный вид, который вы иногда находите в начале потоков Unicode, давая понять, что такое кодировка. Он обычно обрабатывает невидимые элементы обработки строк в Java, поэтому вы должны каким-то образом смутить его, но, не видя своего кода, трудно увидеть, где.

Возможно, вы сможете устранить его тривиально, вручную удалив спецификацию из строки перед ее подачей на javac . Вероятно, он квалифицируется как пробел, поэтому попробуйте называть trim() на входной строке и подавать вывод этого значения на javac .

Я решил это, щелкнув правой кнопкой мыши в своем программном файле textEdit и выбрав [замены] и отключив смарт-кавычки.

I have a program that allows a user to type java code into a rich text box and then compile it using the java compiler. Whenever I try to compile the code that I have written I get an error that says that I have an illegal character at the beginning of my code that is not there. This is the error the compiler is giving me:

9 Answers 9

The BOM is generated by, say, File.WriteAllText() or StreamWriter when you don’t specify an Encoding. The default is to use the UTF8 encoding and generate a BOM. You can tell the java compiler about this with its -encoding command line option.

The path of least resistance is to avoid generating the BOM. Do so by specifying System.Text.Encoding.Default, that will write the file with the characters in the default code page of your operating system and doesn’t write a BOM. Use the File.WriteAllText(String, String, Encoding) overload or the StreamWriter(String, Boolean, Encoding) constructor.

Just make sure that the file you create doesn’t get compiled by a machine in another corner of the world. It will produce mojibake.

That’s a byte order mark, as everyone says.

javac does not understand the BOM, not even when you try something like

You need to strip the BOM or convert your source file to another encoding. Notepad++ can convert a single files encoding, I’m not aware of a batch utility on the Windows platform for this.

The java compiler will assume the file is in your platform default encoding, so if you use this, you don’t have to specify the encoding.

  1. If using an IDE, specify the java file encoding (via the properties panel)
  2. If NOT using an IDE, use an advanced text-editor (I can recommend Notepad++) and set the encoding to «UTF without BOM», or «ANSI», if that suits you.

The byte order mark (BOM) is a Unicode character used to signal the endianness (byte order) of a text file or stream. Its code point is U+FEFF. BOM use is optional, and, if used, should appear at the start of the text stream. Beyond its specific use as a byte-order indicator, the BOM character may also indicate which of the several Unicode representations the text is encoded in.

The BOM is a funky-looking character that you sometimes find at the start of unicode streams, giving a clue what the encoding is. It’s usually handles invisibly by the string-handling stuff in Java, so you must have confused it somehow, but without seeing your code, it’s hard to see where.

You might be able to fix it trivially by manually stripping the BOM from the string before feeding it to javac . It probably qualifies as whitespace, so try calling trim() on the input String, and feeding the output of that to javac .

Оцените статью
SoftLast
Добавить комментарий