Диагностика Integer.parseInt () Ошибка - PullRequest
1 голос
/ 04 ноября 2011

Я читаю текст с разделителями в виде строки из плоского файла и у меня возникла ошибка при разборе текста.Я старая рука Java, но я не трогал ее в течение нескольких лет.Вот код:

        String zipString = tokenizerForOneLine.nextToken();
        System.out.println( "Zip String: -->" + zipString + "<--");
        //zipString = "18103"; <<<This works!!!
        int zipInt = Integer.parseInt( zipString );
        aProvider.setZipCode( zipInteger );

Вот результат:

Zip String: -->�1�8�1�0�3�<--
java.lang.NumberFormatException: For input string: "�1�8�1�0�3�"
NumberFormatException while reading file.
Detailed Message: For input string: "�1�8�1�0�3�"

Я наивно полагаю, что это проблема кодирования.Это возможно?Это не имеет никакого смысла для меня.Или я делаю что-то действительно глупое и просто не вижу этого?

Как мне диагностировать проблему с кодировкой?(Мой поставщик данных утверждает, что он в стандартном UNICODE).

Заранее спасибо,

Гвидо

1 Ответ

6 голосов
/ 04 ноября 2011

Убедитесь, что вы создаете ридер с правильной кодировкой. Ваш код должен выглядеть так:

    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("data.csv"), encoding));
    String line;
    while ((line = in.readLine()) != null) {
        StringTokenizer tokenizer = new StringTokenizer(line, "|");

        ...
    }

Кодировка, вероятно, UTF-16.

Также, если файл имеет метки порядка байтов, вы можете использовать BOMInputStream от Commons IO для автоматического определения кодировки.

http://commons.apache.org/io/api-release/org/apache/commons/io/input/BOMInputStream.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...