2013-02-05 8 views
6

私はUTF-8でエンコードされるべきいくつかのバイトを持っていますが、ユーザが何らかの形でテキストエディタを正しい方法で使用できなければ、テキストを含むかもしれないテキストはISO8859-1エンコーディングです。どのようにInputStreamReaderがエンコーディングのために無効なデータで失敗するのですか?

私はInputStreamReaderの付いたファイル読み:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8")); 

をしかし、すべての時間は、ユーザがISO8859-1に保存されているときにInputStreamReaderは文句を言うが、追加していない不正なUTF-8です「A」のようにウムラウトを使用していますプレースホルダ文字。

無効な入力の例外をスローする簡単な方法はありますか?

答えて

6
CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder(); 
decoder.onMalformedInput(CodingErrorAction.REPORT); 
decoder.onUnmappableCharacter(CodingErrorAction.REPORT); 
InputStreamReader reader = new InputStreamReader(
    new FileInputStream(file), decoder); 
+0

ありがとう!これを行うためのAPIがあるかどうかはわかりませんでした。 – Daniel

1

単に追加.newDecoder()

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder()); 
関連する問題