0

ユーザーが秘密の言葉を推測する必要があるアプリを構築しています。assets フォルダーに *.txt ファイルがあります。問題は、単語がアルバニア語であることです。私たちの言語は「ë」や「ç」などの文字を使用するため、これらの文字を含む単語をファイルから読み込もうとすると、邪悪な記号が表示され、これらの文字に string.compare() を実装できません。UTF-8 で多くのオプションを試しましたが、Eclipse の設定を変更しましたが、それでも同じエラーが発生します。

誰かがアドバイスをくれたら本当にありがたいです。

ファイルを読み取るために使用するコードは次のとおりです。

AssetManager am = getAssets();
strOpenFile = "fjalet.txt";

InputStream fins = am.open(strOpenFile);

reader = new BufferedReader(new InputStreamReader(fins));

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

while ((aDataRow = reader.readLine()) != null) {
    aBuffer += aDataRow + "\n";
    stringList.add(aDataRow);           
}

それ以外の場合、言及された文字を除いて、コードは正常に機能します

4

3 に答える 3

3

を作成するときに適用されるデフォルトのエンコーディングがInputStreamReaderファイルと一致しないことは明らかです。

読み込もうとしているファイルが UTF-8 の場合、これは機能するはずです。

reader = new BufferedReader(new InputStreamReader(fins, "UTF-8"));

ファイルが UTF-8 でない場合、それは機能しません。代わりに、ファイルの実際のエンコーディングの名前を使用する必要があります。(私の推測では、それはISO/IEC_8859-1またはISO/ IEC_8859-16 にあると思います。)


ファイルのエンコーディングが実際に何であるかを理解したら、それが Java プラットフォームのデフォルトのエンコーディングに対応しない理由を理解しようとする必要があります...そして、それに対して何をすべきかについて実際的な決定を下す必要があります。(上記のように、エンコーディングをアプリケーションにハードワイヤする必要がありますか?構成プロパティまたはコマンド・パラメータにする必要がありますか?デフォルトのエンコーディングを変更する必要がありますか?ファイルを変更する必要がありますか?)

于 2012-12-02T14:51:22.583 に答える
1

ファイルの作成時に使用された文字エンコーディングを判別し、それを読み取るときにこのエンコーディングを指定する必要があります。たとえば、UTF-8 の場合は、

reader = new BufferedReader(new InputStreamReader(fins, "UTF-8"));

また

reader = new BufferedReader(new InputStreamReader(fins, StandardCharsets.UTF_8));

Java 7 を使用している場合。

Notepad++ のようなテキスト エディターには、ファイルのエンコーディングを推測する優れたヒューリスティックがあります。そのようなエディタで開いてみて、推測されたエンコーディングを確認してください (文字が正しく表示される場合)。

于 2012-12-02T14:50:50.957 に答える
1

ファイルのエンコーディングを知っておく必要があります。

InputStreamクラスはファイル バイナリを読み取ります。入力を文字として解釈することはできますが、それは暗黙の推測であり、間違っている可能性があります。

InputStreamReaderクラスはバイナリを文字に変換します。ただし、文字セットを知っている必要があります。

文字セットごとにフィードするには、次のバージョンを使用する必要があります。

アップデート

UTF-8 でエンコードされたファイルがあることを示唆しないでください。間違っている可能性があります。ここロシアでは、CP866、WIN1251、KOI8 などのエンコーディングがあり、これらはすべて UTF8 とは異なります。おそらく、テキスト ファイルの一般的なアルバニア語エンコーディングがいくつかあるでしょう。OSの設定を確認して推測してください。

于 2012-12-02T14:55:39.077 に答える