7

UTF-8 でエンコードする必要があるバイトがいくつかありますが、ユーザーがテキスト エディターを正しい方法で使用できなかった場合、ISO8859-1 エンコードのテキストが含まれる可能性があります。

InputStreamReader を使用してファイルを読み取ります。

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

しかし、ユーザーが "ä" のようなウムラウトを使用するたびに、これは ISO8859-1 に格納されたときに無効な UTF-8 であり、InputStreamReader は文句を言わず、プレースホルダー文字を追加します。

これを無効な入力で例外をスローさせる簡単な方法はありますか?

4

2 に答える 2

7
CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
decoder.onMalformedInput(CodingErrorAction.REPORT);
decoder.onUnmappableCharacter(CodingErrorAction.REPORT);
InputStreamReader reader = new InputStreamReader(
    new FileInputStream(file), decoder);
于 2013-02-05T07:31:57.590 に答える
1

追加するだけ.newDecoder()です:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8").newDecoder());
于 2013-02-05T10:00:13.933 に答える