2016-08-09 4 views
4

以前は自分のコードで苦労しているエンコードされたファイルを読むのに問題があります。Java - 以前に作成されたエンコードされたファイルを正しく読み取ることができません

元の文字列が正しく

エンコードされた文字列をファイルに保存するための私のコードは次のとおりです(アクセント記号を含む)が表示され

OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(fileName), 
     "ISO-8859-1"); 
writer.write(text); 

をその後、私はこのようなファイルを読みます:

InputStream is = getClass.getResourceAsStream(fileName); 

try {   
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "ISO-8859-1")); 
    String line; 
    StringBuilder sb = new StringBuilder(); 

    while((line = br.readLine()) != null) { 
     sb.append(line); 
    } 

    String result = sb.toString(); 
} catch (UnsupportedEncodingException e3) { 
} catch (IOException e) { } 

文字列の結果が正しく表示されません。たとえば、アクセント記号がありません。

また、文字列をバイトにエンコードし、それらのバイトをファイルに書き込むような他の方法も試しました。他のISOエンコーディングでも同じ結果が得られます。何か案が?

+0

APIは問題なく動作します。端末のエンコード設定には他にもエラーがある必要があります。 – Kennet

+0

ファイルシステムにファイルを書きますが、読み込みはクラスパス上のリソースから発生し、可能であればjarまたはwarでパックされます。つまり、ソースディレクトリに1つ、ビルドディレクトリに1つ、またはjarファイルに2つの異なるファイルがある可能性があります。そして、読み込みは、書かれたものの前に、キャッシュされたバージョンでさえあるかもしれません。それを確認するために内容を変更してください。 (そして 'append(" \ r \ n ")'が欠けています。クローズコールと同じです。) –

+0

再現できません。同じエンコーディングで同じファイルを読み込むと、同じ文字が得られますが、実際に書き込むためには明示的な 'writer.close()'を追加する必要があります。何が起こる可能性があります:Joopが提案する期待されたファイルを読んでおらず、誤って設定された端末にそのファイルの1つを表示するなどです。しかし、Java変換の問題ではありません。 –

答えて

0

問題は、文字列に異なる文字セット、おそらくUTF-16があることです。出力あなたに必要な文字セット

などのテキストは、この答えは解決syntax

+0

あなたの文字列がおそらくUTF-16 *とは異なる文字セットを持っていることを具体的に説明できますか?もちろんです! Java仕様では、文字列は内部的にUTF16でエンコードされています。しかし、これは質問とはまったく無関係です。 –

+0

stringbuilderが文字を間違って出力しているのはなぜですか?その理由は、stringbuilder.toStringがUTF-16を出力しているからです。 – farrellmr

+0

UTF-16の直接出力はGUIプログラムでのみ発生します。コマンドラインインターフェイスは一般的なシステム(Linux、Windows、Mac)で8ビット文字を使用するためです。 'System.out.println'を使うと文字列は自動的にシステムのデフォルトエンコーディングでエンコードされます。しかし、実際には端末ウィンドウでエンコーディングの問題になる可能性があります。あなたの答えはそれほど悪くはなく、どこに問題があるのか​​を示しますが、あなたが与える理由は正しいものではありません。 –

0

問題を示しています!

コード内のエラーとは関係ありませんでした。私は現在チームに取り組んでおり、プロジェクトはメイクで行われています。

プロジェクトを作成した時点で、Mavenはすべてのリソースを別のフォルダにコピーし、UTF-8でエンコードしました。コードでは、リソースを取得するときに、元のファイルではなく、によって生成されたUTF-8エンコードファイルがMavenになっています。

この詳細を投稿していないことを申し訳ありません。私はで新しくなりました.Mavenと私はこの種の問題を引き起こす可能性があるとは知らなかった。

ありがとうございました!

関連する問題