Специальные символы из текстового файла - PullRequest
1 голос
/ 13 ноября 2011

Я загружаю текстовый файл из ftp с общей библиотекой ftp.

Проблема в том, что когда я читаю файл в массив построчно, он не принимает такие символы, как æøå.Вместо этого он просто показывает "?"символ.

Вот мой код

  FileInputStream fstream = openFileInput("name of text file");
  BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));
  String strLine;

  ArrayList<String> lines = new ArrayList<String>(); 

  while ((strLine = br.readLine()) != null)   {
      lines.add(strLine);
  }

  String[] linjer = lines.toArray(new String[0]);

  ArrayList<String> imei = new ArrayList<String>(); 

  for(int o=0;o<linjer.length;o++)
  {
      String[] holder = linjer[o].split(" - ");
      imei.add(holder[0] + " - " + holder[2]);
  }

  String[] imeinr = imei.toArray(new String[0]);

Я пытался поместить UTF-8 в мой inputtreamreader, и я пытался с классом UnicodeReader, но безуспешно.

Я довольно новичок в Java, так что, может быть, это глупый вопрос, но надеюсь, вы поможете.:)

Ответы [ 3 ]

4 голосов
/ 13 ноября 2011

Нет причин использовать DataInputStream.Классы DataInputStream и DataOutputStream используются для сериализации примитивных типов данных Java («сериализация» означает чтение / запись данных в файл).Вы просто читаете содержимое текстового файла построчно, поэтому использование DataInputStream не нужно и может привести к неверным результатам.

FileInputStream fstream = openFileInput("name of text file");
//DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream, "UTF-8"));

Совет профессионального Java-программиста :Цикл foreach был недавно добавлен в язык программирования Java.Это позволяет программисту перебирать содержимое массива без необходимости определять счетчик цикла.Это упрощает ваш код, облегчая его чтение и сопровождение с течением времени.

for(String line : linjer){
  String[] holder = line.split(" - ");
  imei.add(holder[0] + " - " + holder[2]);
}

Примечание. Циклы Foreach также можно использовать с List объектами.

2 голосов
/ 13 ноября 2011

FTP имеет два режима: двоичный и ascii. Убедитесь, что вы используете правильный режим. Подробности смотрите здесь: http://www.rhinosoft.com/newsletter/NewsL2008-03-18.asp

2 голосов
/ 13 ноября 2011

Я бы предположил, что файл не может быть в UTF-8. Это может быть CP1252 или что-то еще, особенно если вы используете Windows.

Попробуйте загрузить файл и запустить свой код в локальной копии, чтобы проверить, работает ли он.

...