Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > equal не срабатывает на одинаковых строках |
Автор: Connie 8.10.2008, 19:15 | ||||
Есть файл в UTF8, я читаю из него построчно. Если первая строка такая <MENU> то начинается дальнейшая обработка. Все вроде бы просто, надо сравнить первую строк со строковой константой Вот код
А вот вывод
|
Автор: polosatij 8.10.2008, 20:51 |
ню ты намутил(а) ![]() в первой строчке, возможно, ещё и \n, то есть переход на новую строку, посему результат и +1.. |
Автор: Connie 8.10.2008, 22:05 | ||||
polosatij, Хорошо, пробуем так
![]() на всякий случай прилагаю этот файл. Нет там никакого переноса ![]() |
Автор: polosatij 8.10.2008, 23:41 | ||
ню.. логично всё.. у тебя ведь перенос не в начале, а в конце ![]()
![]() |
Автор: redrick 9.10.2008, 00:18 |
Bug ID: 4508058 =) http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 сталобыть скипать надо первые 3 байта |
Автор: Connie 9.10.2008, 11:43 | ||
polosatij, http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()
![]() redrick, я в принципе и пошел по этому пути, не стал так сравнивать line.equals("<MENU>"), а вместо этого line.contains("<MENU>") Я так и предположил, что это какой то глюк в распозновании UTF, спасибо за ссылку |
Автор: SoulKeeper 9.10.2008, 12:21 | ||
Для чего вообще в UTF-8 BOM пихать? |
Автор: redrick 9.10.2008, 13:00 | ||
SoulKeeper, вот вроде оттудаже:
типа просто маркер что файл UTF-8. Судя по всему это косяк который сделали и теперь не правят, т.к. боятся что у всех все сломается(баг 2001 года). С другой стороны стандарту 100 лет и здесь сановцы просто налажали. |
Автор: Alexander1966 10.10.2008, 13:09 | ||
Странно, у меня все верно проверяет. Для: wwweeeee <MENU> wwwwwwwww выдает: no yes no
|
Автор: alexadr 10.10.2008, 13:31 | ||
Alexander1966, а попробуй для вот такого контента файла UTF8 с BOM:
|
Автор: redrick 10.10.2008, 15:08 |
Alexander1966, просто файл у вас видимо без BOMа как сказал alexadr посмотрите хексэдитором |
Автор: Connie 11.10.2008, 07:10 | ||
Alexander1966,
В том и проблема, что сравнение не проходит, если <MENU> в первой строчке, а оно только там и должно быть, структура файла такая, если в первой строчке нет этой записи, то значит это не тот файл и дальнейшая обработка не производится. Попробуйте сделать сравнение line.equals("wwweeeee") так, что бы wwweeeee эта строчка была первой. Там далее в файле есть еще одна похожая строчка <DATA> так вот с ней сравнение проходит. При этом надо помнить, что формат того файла я поменять никак не смогу, т.к. он делается другой программой, т.е. работаю с тем, что есть. Но впрочем я решение нашел, я написал выше, оно меня устраивает ![]() ![]() |
Автор: ecologist 11.10.2008, 13:15 |
А почему исполь зуется FileStream - он же для побайтного считывания ? Может лучше FileReader ? Я что-то не припомню таких проблем в этом случае. |
Автор: Connie 11.10.2008, 18:13 |
ecologist, потому что нужно сделать конверсию UTF8, а уже поверх этого используется BufferedReader, а он то читает построчно. |
Автор: Alexander1966 14.10.2008, 16:52 |
Работает и с первой строчкой. Файл создаю в ASPLinux. Midnight Commander Locale=UTF-8.RU без BOM - это точно |
Автор: alexadr 15.10.2008, 21:56 |
Alexander1966, ну вот потому что он без BOM и все работает![]() |