文本文件中的特殊字符

时间:2011-11-13 14:54:40

标签: java android file character

我正在从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放入我的inputstreamreader中,并尝试使用UnicodeReader类,但没有成功。

我对Java很新,所以可能只是一些愚蠢的问题,但希望你能提供帮助。 :)

3 个答案:

答案 0 :(得分:4)

没有理由使用DataInputStreamDataInputStreamDataOutputStream类用于序列化原始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个对象一起使用。

答案 1 :(得分:2)

我建议该文件可能不是UTF-8。它可能在CP1252或其他东西,特别是如果你使用Windows。

尝试下载文件并在本地副本上运行代码以查看是否有效。

答案 2 :(得分:2)

FTP有两种模式二进制和ascii。确保使用正确的模式。在此查看详细信息:http://www.rhinosoft.com/newsletter/NewsL2008-03-18.asp