1バイトのエンコーディングでテキストファイルに文字ストリームを書き込みます。 ストリーム内のマップできない文字を検出してフォールバックアクション(高レベルで、無効な文字を削除または置換しない)を行うことができるようにしたいと考えています。ストリーム内のマップできない文字を検出します。
私は今OutputStreamWriterを使用していますが、マッピングの失敗が発生することはありますか?
private void convert(Iterable<String> lines, OutputStream os) throws CoreException, IOException {
String lineDelimiter = ResourcesUtils.getLineDelimiter(file.getProject());
Charset charset = Charset.forName(file.getCharset());
CharsetEncoder encoder = charset.newEncoder();
encoder.onUnmappableCharacter(CodingErrorAction.REPORT);
try (OutputStreamWriter writer = new OutputStreamWriter(os, encoder)) {
Joiner.on(lineDelimiter).appendTo(writer, lines);
}
}
このコードは、サンプル無効な入力に投げたが、のOutputStreamWriterまたは入力の他の実装でそうすることが保証されている場合、それは不明です。
マップできない文字を含むストリームを変換する際に例外を取得するにはどうすればよいでしょうか?
試しましたか?無効なデータを入力したときに何が起こったのですか? –
私はうまく働いていましたが、** GuavaのJoiner **は使用しませんでした。多分それが原因です。 –