我正在从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很新,所以可能只是一些愚蠢的问题,但希望你能提供帮助。 :)
答案 0 :(得分:4)
没有理由使用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
个对象一起使用。
答案 1 :(得分:2)
我建议该文件可能不是UTF-8。它可能在CP1252或其他东西,特别是如果你使用Windows。
尝试下载文件并在本地副本上运行代码以查看是否有效。
答案 2 :(得分:2)
FTP有两种模式二进制和ascii。确保使用正确的模式。在此查看详细信息:http://www.rhinosoft.com/newsletter/NewsL2008-03-18.asp