エラーが発生しましたio.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence
解決策は、UTF-8でファイルを読み書きすることです。
私のコードは:
InputStream input = null;
OutputStream output = null;
OutputStreamWriter bufferedWriter = new OutputStreamWriter( output, "UTF8");
input = new URL(url).openStream();
output = new FileOutputStream("DirectionResponse.xml");
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
BufferedReader br = new BufferedReader(new FileReader("DirectionResponse.xml" ));
FileWriter fstream = new FileWriter("ppre_DirectionResponse.xml");
BufferedWriter out = new BufferedWriter(fstream);
私はURLを読み取ってファイルDirectionResponse.xmlに書き込みます。次にDirectionResponse.xmlを読み取り、* ppre_DirecionResponse.xml *と同じように書き込んで処理します。
TF-8で読み取りと書き込みが行われるようにこれを変更するにはどうすればよいですか?
最初に、output.close()
を呼び出す必要があります(または、少なくともファイルを入力用に開く前にoutput.flush()
を呼び出します。これがおそらく問題の主な原因です。
次に、FileReader
またはFileWriter
を使用しないでください。これは、常にプラットフォームのデフォルトのエンコーディング(多くの場合、UTF-8ではない)を使用するためです。から FileReader
のドキュメント :
このクラスのコンストラクタは、デフォルトの文字エンコーディングとデフォルトのバイトバッファサイズが適切であることを前提としています。
FileWriter
を使用する場合も同じ問題があります。これを交換してください:
BufferedReader br = new BufferedReader(new FileReader("DirectionResponse.xml" ));
このようなもので:
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("DirectionResponse.xml"), "UTF-8"));
fstream
についても同様です。
Utf-8で書いているのに、utf-8で特に読んでいないようです。リンクで提供した例に従ってください。
try {
Reader reader =
new InputStreamReader(
new FileInputStream(args[0]),"UTF-8");
BufferedReader fin = new BufferedReader(reader);
Writer writer =
new OutputStreamWriter(
new FileOutputStream(args[1]), "UTF-8");
BufferedWriter fout = new BufferedWriter(writer);
String s;
while ((s=fin.readLine())!=null) {
fout.write(s);
fout.newLine();
}
//Remember to call close.
//calling close on a BufferedReader/BufferedWriter
// will automatically call close on its underlying stream
fin.close();
fout.close();
} catch (IOException e) {
e.printStackTrace();
}