2012-03-21 5 views
14

Привет и благодарю вас за чтение моего сообщения.Компиляция (javac) кодированный исходный код Java UTF8 с спецификацией

Моя проблема заключается в следующем: я хочу скомпилировать исходный Java-файл с «javac» с этим файлом, который кодируется UTF-8 с помощью спецификации (ОС - WinXP).

Ниже то, что я делаю:

1) Создайте файл с «Блокноте» и выбрать UTF-8 кодировке

dos> notepad Test.java 
"File -> Save as..." 
File name : Test.java 
Save as type: All Files 
Encoding : UTF-8 
Save 

2) Создать класс Java в этом файле и сохранили файл как в 1)

public class Test 
{ 
    public static void main(String [] args) 
    { 
     System.out.println("This is a test."); 
    } 
} 

3) Визуализируйте версию шестнадцатеричного файла (первая линия)

dos> xxd Test.java | head -1 
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class 

Примечание: эф бб Б.Ф. является UTF-8, закодированный BOM (The UTF-16 в кодировке ВОМ быть FE FF).

4) Попробуйте скомпилировать этот код с "JAVAC"

dos> javac -encoding utf8 Test.java 
Test.java:1: illegal character: \65279 
?public class Test 
^ 
1 error 

Примечание: десятичной версия спецификации.

Мой вопрос заключается в следующем: как я могу сделать эту работу с компиляцией:

  • сохранить его в кодировке UTF-8 кодируются
  • и сохраняя BOM?

Благодарим вас за помощь и наилучшие пожелания.

Леа

+4

Правильно: вам нужно удалить спецификацию. Он не имеет бизнеса в UTF-8, поэтому, конечно, это ошибка. Это давняя ошибка Microsoft. Никогда не помещайте спецификацию в UTF-8 !!!!! – tchrist

+0

Здравствуйте. Спасибо за ваш ответ. Я использовал «Notepad ++» для кодирования файла как «UTF8 без спецификации». Теперь выполняется компиляция кода с помощью «javac». –

+3

@tchrist [Стандарт Unicode (стр. 30)] (http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf) допускает спецификацию в UTF-8, поэтому вы имеете полное право ее размещать если вы этого желаете. Почему вы хотите, это еще одна история, но «javac» должен ее обработать. – ArtB

ответ

20

Обрежьте BOM, а затем использовать javac -encoding utf8 x.java

14

Это не проблема с текстовым редактором, это проблема с JAVAC! Спецификация Unicode говорит, что спецификация в UTF-8 полезна, она не говорит, что это запрещено! Если спецификация может быть там, то javac HAS для ее обработки, но это не так. Фактически, использование спецификации в файлах UTF-8 полезно для того, чтобы отличить ANSI-кодированный файл от кодированного в Юникоде файла.

Предлагаемое решение по удалению спецификации является лишь обходным решением, а не правильным решением.

Это сообщение об ошибке указывает на то, что эта «проблема» никогда не будет исправлено: http://bugs.java.com/view_bug.do?bug_id=4508058

Поскольку этот поток находится в 2-х верхних результатов Google для поиска «Javac BOM», я оставляю это здесь для будущих читателей ,

Смежные вопросы