Integer.parseInt() хвърля NumberFormatException с UTF-8 файлове

Трябва да анализирам цели числа от съдържанието на файл.

За тестване на моите алгоритми, когато дам съдържанието на файл от деклариран низ

String test = "15 kuruş";

Integer.parseInt работи добре. Но когато чета с клас Scanner от UTF-8 файл, той не работи и дава изключение

java.lang.NumberFormatException: За входен низ: "15"

Забележка: Разделих низа на "15" и "kuruş", така че методът parseInt приема само "15" като аргумент.

Примерен код:

    satir = satir.trim();//15 kuruş
    StringTokenizer tokenizer = new StringTokenizer(satir," ");
    System.out.println(tokenizer.countTokens());//2
    String s = tokenizer.nextToken();
    int deger = Integer.parseInt(s);//where the exception was throwed

person Yunus Eren Güzel    schedule 07.12.2012    source източник
comment
Моля, покажете кратка, но пълна програма, която демонстрира проблема. Също така проверете дали '1' и '5' са нормалните ASCII символи или някакъв широк вариант.   -  person Jon Skeet    schedule 07.12.2012
comment
ако разделите с интервали, BOM може да е преди 15   -  person jlordo    schedule 07.12.2012
comment
Добре, редактирах. Предполагам, че не са нормални ASCII знаци. Както посочвам във въпроса, когато дам тестов низ, той работи добре, но когато прочета същия низ от файл, той хвърля изключение.   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
Отворете файла си в шестнадесетичен редактор, за да проверите това   -  person jlordo    schedule 07.12.2012
comment
@jlordo System.out.print(s) дава 15.   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
@jlordo, когато премахнах BOM, работи добре :) благодаря!   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
@jlordo можеш ли да го поставиш като отговор, за да мога да го приема   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
@ljordo, момчета, какво имате предвид под BOM тук?   -  person Nikolay Kuznetsov    schedule 07.12.2012
comment
@NikolayKuznetsov BOM = Марка за ред на байтове Може да присъства в Unicode кодирани файлове, за да обозначи кое кодиране е използвано. Понякога води до проблеми и затова често се пропуска.   -  person Fildor    schedule 07.12.2012


Отговори (1)


Вашият UTF-8 файл вероятно започва с BOM, трябва да прочетете файла с правилното кодиране или се отървете от него ръчно.

Така че, когато вашият 15 вече не е предшестван от BOM, Integer.parseInt() ще работи.

person jlordo    schedule 07.12.2012