2012-05-11 3 views
1

私はそれが明白でなければならないが、答えを見つけることができないことを知っている。InputStreamで.txtを読むときに、記号の代わりに疑問符が表示されるのはなぜですか?

私はそのような「、」、等...?

これは私が使用している方法で、

public void read(Context context) { 

     InputStream inputStream = context.getResources().openRawResource(
       R.raw.puzzles); 
     Scanner scanner = new Scanner(inputStream); 
     scanner.useDelimiter(PATTERN); 
     for (int i = 0; i < 70; i++) { 
      ids[i] = scanner.next(); 
      titles[i] = scanner.next(); 
      questions[i] = scanner.next(); 
      answers[i] = scanner.next(); 
     } 

    } 

おかげ

答えて

1

すなわち new Scanner (InputStream src, String charsetName)

、あなたは文字セットを渡し Scannerのインスタンスを使用してみてください。

まず初めに、バイト読み込みの代わりに文字読み込みのためにInputStreamからBufferedReaderを作成しました。

最も重要なのは、charSetNameを使用してInputStreamをコンストラクタでインスタンス化したことです。

ノートパッドで[名前を付けて保存]を選択すると、エンコードを選択できます。

最後に、サポートされているエンコーディングであるhereが見つかりました。

NotePadのデフォルトのものはANSIのようですが、サポートされていないようですので変更して、.txtファイルをUTF8として保存します。ここでは、コードされ

public void read(Context context) { 

     InputStream inputStream = context.getResources().openRawResource(
       R.raw.puzzles); 

     BufferedReader bufferedReader = null; 
     try { 
      bufferedReader = new BufferedReader(new InputStreamReader(
        inputStream, "UTF8")); 
     } catch (UnsupportedEncodingException e1) { 
      e1.printStackTrace(); 
     } 

     Puzzle p = null; 

     Scanner scanner = new Scanner(bufferedReader); 
     scanner.useDelimiter(TOKEN); 
     // Skips the first strange char 
     scanner.next(); 
     while (scanner.hasNext()) { 

      p = new Puzzle(); 
      p.setId(scanner.next()); 
      p.setTitle(scanner.next()); 
      p.setQuestion(scanner.next()); 
      p.setAnswer(scanner.next()); 
      puzzles.add(p); 
     } 

    } 
0

スキャナとして右characteresを取得するために何をすべきかオブジェクトはデフォルトで文字と数字だけを認識しているようです...この質問に対する回答のように、スキャナを使用せずにアプローチしてみてください:Android read text raw resource file

ring.indexOf()、TextUtils.StringSplitterなどのように、各行を読み込んで、トークン間の真の文字列を解析します。

多かれ少なかれデータを持つ将来のパズルファイル用の固定数(あなたの場合は70)ではなく、ファイルの終わりまでデータを読み取るためにwhileループを使用するとよいでしょう。

+0

おかげ@Sam、私は間違いなく、文字を読んアプローチのために行くだろうが、あなたのリンクに言ったようにバイトのinstedが、私は使用できない理由をまだ理解していませんスキャナ。あなたはそれが文字と数字だけを認識することをどこで読んだのですか?ループに関して、あなたは絶対に正しいです。私はちょうどスキャナのクラスでそれを行う方法を知らなかった。 thx – eskalera

+0

正直なところ、あなたのコードとスキャナのドキュメントは、あなたがシンボルを読んでいない理由を明らかにしていないので、あなたはそれを作っておらず、同意し、実行可能な選択肢を提供していたと仮定しました。 :)なぜ私は他のアプローチを自分で使用したのか、その理由を調べる気がしなかった。 – Sam

+0

BufferedReaderのreadLine()アプローチで正しいシンボルを取得できません。助言がありますか? – eskalera

0

は、私はようやく答えを見つけた研究の数日後にHTH

+0

こんにちは@Devunwired、私はutf - 8で試したが、同じ結果を得る。どのような文字セットを試してみるべきですか? – eskalera

関連する問題