2012-03-01 2 views
3

Я разбираю много .java-файлов с последними JavaParser.Исключение JavaParser «Лексическая ошибка», возникающая при анализе файла с немецкими умляутами (äöüß)

Файлы обрабатываются так:

in = new FileInputStream(file); 
cu = JavaParser.parse(in); 

следующее исключение возникает, как только один из исходных-файлов содержит немецкий умляут (ä, ö, ü, ß) (они появляются только в комментарии .java-файла)

Exception in thread "main" japa.parser.TokenMgrError: Lexical error at line 82, column 17. Encountered: "\ufffd" (65533), after : ""

Что я могу сделать, чтобы исправить эту проблему. Я не могу изменить все исходные файлы.

ответ

3

Существует перегрузка на JavaParser.parse(), которая принимает кодировку. В зависимости от кодировки файла попробуйте это;

cu = JavaParser.parse(in, "ISO8859_1"); 

или это

cu = JavaParser.parse(in, "UTF8"); 

Все поддерживаемые кодировки перечислены here.

+0

Оба кодировки не смогли исправить мою проблему. – Hedge

+0

@Hedge Означает ли оно то же или другое сообщение об ошибке? Немного сложно догадаться, какая кодировка используется, но если JavaParser использует NIO, может потребоваться вместо этого записать 'ISO-8859-1'. Если это не сработает, попробуйте переключить UltraEdit в шестнадцатеричный режим и опубликуйте, как одна или несколько букв закодированы в шестнадцатеричном формате. Это позволит довольно легко найти правильную кодировку. –

+0

Я пробовал UTF8, UTF-8, ISO-8859-1 и SO8859_1. Шестнадцатеричное число для 'ü' равно FC – Hedge

1

Скорее всего, вам просто нужно указать правильное кодирование:

cu = JavaParser.parse(in, "utf-8"); 

... или независимо от вашего фактического кодирования.

+0

Это, к сожалению, не устраняет проблему. UltraEdit показывает кодировку как UNIX. – Hedge

+0

@Hedge Если он не показывает UNIX-UTF8 (или, возможно, UTF8-UNIX, прошло некоторое время с тех пор, как я использовал UltraEdit) в качестве кодировки на панели инструментов, скорее всего, он закодирован в iso-8859-1 или iso-8859-15. –

+0

@Hedge: Ну откуда вы взяли исходный код? Нет такой кодировки, как «UNIX» - это, вероятно, просто указывает на окончание строк. –

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