2011-11-13 15 views
1

私はftpライブラリから一般的なftpライブラリを使ってテキストファイルをダウンロードしています。txtファイルの特殊文字

問題は、ファイルを行単位で読み込んだときに、æøåなどの文字が読み込まれないという問題です。代わりに、それは単に "?"キャラクター。ここで

は私のコード

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]); 

ですが、成功しません、私はInputStreamReaderの中でUTF-8を入れて試してみました、と私はUnicodeReaderクラスで試してみました。

私はかなりJavaに新しいので、いくつかのばかげた質問かもしれないが、あなたが助けることを願っています。 :)

+0

コードが正しいように見えます。文字が正しく読み込まれていないことをどのように知っていますか?おそらくあなたの問題は、文字列を扱うコードにありますか? – AlexR

答えて

4

DataInputStreamを使用する理由はありません。 DataInputStreamおよびDataOutputStreamクラスは、Javaデータ型のプリミティブをシリアライズするために使用されます(「シリアライズ」とは、データをファイルに読み書きすることを意味します)。テキストファイルの内容を1行ずつ読み込んでいるだけなので、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オブジェクトにも使用することができます。

+0

DataInputStreamをテキスト用に使用している開発者の例は非常に多くありました。 –

2

ファイルがUTF-8でない可能性があります。特にWindowsを使用している場合は、CP1252などにある可能性があります。

ファイルをダウンロードし、ローカルコピーでコードを実行して、それが動作するかどうかを確認してください。

+0

私はそれをダウンロードしようとし、メモ帳の+ +でそれを開いて、それはANSIと、æøåを示しています。 ファイルをansiとして開くにはどうすればいいですか? – NikolajSvendsen

+0

"UTF-8"引数を新しいInputStreamReader()から離しておくと、Javaが適切な処理を行うことができます。 – SystemParadox