2014-10-04 2 views
2

Так что я нахожусь на своем пути с этой программой. Я читаю текст из текстового файла на Java. Если у меня есть все, что я делаю со строкой, это минимальный минимальный код, который будет показан.Java добавляет пространства при чтении в строке?

  while ((lineIn = myReader.readLine()) != null) { 
       System.out.println("LineIn: \""+lineIn+"\""); 
       System.out.println("Length: "+lineIn.length()); 
      } 

То, что он печатает, однако, очень странно. Строка должна гласить:

001 2014/06/09 09:40:24 0.000

Но это то, что я получаю:

LineIn: "�2�6�1�8� �2�0�1�4�/�0�7�/�1�0� �2�3�:�1�5�:�0�3� �0�.�0�0�0�" Length: 61

На переполнение стека это фактически показывает вверх штраф. Вы можете копировать и вставлять «LineIn: etc» в свою адресную строку и видеть, что в нумерации мало невидимых пробелов. Я понятия не имею, почему они есть, какие они есть и откуда их получает Java. Открытие документа, из которого он поступает из простого текстового редактора, не показывает такого интервала, а копирование и вставка из текстового редактора в адресную строку браузера также не имеет избыточного интервала. Это очень странно, и я надеюсь, что кто-то может предложить понимание. Я вытаскиваю свои волосы здесь.

+2

Как раз для того, чтобы вы знали, прежде чем исправить: Java и Javascript отличаются от Луны и Земли. – Dici

+0

Как кодируется файл yout? – Dici

+1

@ Dici: Или как схожий с автомобилем и ковром: http://stackoverflow.com/a/245068/367273 – NPE

ответ

4

Похоже, вы читаете данные UTF-16, как если бы он имел 8-битную кодировку.

Если вы construct a java.io.InputStreamReader, вы можете указать текст ввода charset, такой как «UTF-16».

+2

, чтобы быть полным, вы должны предоставить ему возможность исправить его кодировку. А именно, использование «Сканера» автоматически выводит кодировку на основе спецификации в начале файла. – SnakeDoc

+1

Хорошая точка, @SnakeDoc. Можно использовать кодировку «UTF-16» для принудительного 16-битного декодирования, и она будет читать необязательный знак байтового байта, чтобы отличать большой или маленький конец. Документ для 'java.util.Scanner' http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.io.File,%20java.lang.String) говорит, что по умолчанию харсет использует «базовую кодировку базовой платформы». Он не говорит, что он будет автоматически выбирать из UTF-16 против UTF-8. – Jerry101

+1

Закончено с помощью этого и сработало. Спасибо :) 'InputStreamReader fileInputStreamReader = new InputStreamReader (fileInStream," UTF-16 ");' – Rob

4

Возможно, из-за форматирования и кодирования, которое использует ваш читатель, попробуйте вместо этого использовать сканер.

2

Java конечно не делает, это может быть UTF-16 закодированный файл. Можете ли вы загрузить файл или его часть где-нибудь?

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