#java #parsing
#java #синтаксический анализ
Вопрос:
Я читаю текст с разделителями в канале из плоского файла, и у меня возникает ошибка при разборе текста. Я старый специалист по 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�"
Я наивно предполагаю, что это проблема с кодировкой. Возможно ли это? Для меня это не имеет смысла. Или я делаю что-то действительно глупое и просто не вижу этого?
Как мне диагностировать проблему с кодировкой? (Мой поставщик данных утверждает, что он находится в стандартном ЮНИКОДЕ).
Заранее спасибо,
Guido
Комментарии:
1. Ну, это странно. После того, как StackOverflow обработал ее, она показала целую кучу странных вопросительных знаков. Теперь я действительно думаю, что это кодировка. Эти вопросительные знаки не отображаются на стандартном выводе (в Netbeans 7.01).
2. Похоже, вы правы, сэр..
3. @GuidoAnselmi: Как всегда, чтобы проверить проблемы с кодировкой, посмотрите на текстовый файл в двоичном редакторе (или hexdump или что-то еще). Я предполагаю, что это UTF-16.
Ответ №1:
Убедитесь, что вы создаете программу чтения с правильной кодировкой. Ваш код должен выглядеть так:
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