以前は自分のコードで苦労しているエンコードされたファイルを読むのに問題があります。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エンコーディングでも同じ結果が得られます。何か案が?
APIは問題なく動作します。端末のエンコード設定には他にもエラーがある必要があります。 – Kennet
ファイルシステムにファイルを書きますが、読み込みはクラスパス上のリソースから発生し、可能であればjarまたはwarでパックされます。つまり、ソースディレクトリに1つ、ビルドディレクトリに1つ、またはjarファイルに2つの異なるファイルがある可能性があります。そして、読み込みは、書かれたものの前に、キャッシュされたバージョンでさえあるかもしれません。それを確認するために内容を変更してください。 (そして 'append(" \ r \ n ")'が欠けています。クローズコールと同じです。) –
再現できません。同じエンコーディングで同じファイルを読み込むと、同じ文字が得られますが、実際に書き込むためには明示的な 'writer.close()'を追加する必要があります。何が起こる可能性があります:Joopが提案する期待されたファイルを読んでおらず、誤って設定された端末にそのファイルの1つを表示するなどです。しかし、Java変換の問題ではありません。 –