Javaでの文字化け検出について

文字化け検出

ファイル読み込み時などで文字化けが発生した時の検出方法について
例えばUTF-8エンコードされたテキストファイルをShift-JISで読み込もうとした際に、該当する文字が存在しない場合は'0xFFFD'の文字に変換されます。
Javaは内部的にはUnicode(正確にはUTF-16らしい)実際Stringクラスのコメントを確認してみると"represents a string in the UTF-16 format in which supplementary characters"のコメントが確認できるので内部的にはUTF-16が使われているような感じです。(jdk1.8.0_73で確認)

それで文字化けが発生した時に使われる文字ですがひし形ないに?が表記されている�が使われると思いますが、UTF-16でこの文字は0xFFFDの文字コードで表せられるので、文字列内に"(char) 0xfffd"の文字が含まれているかのチェックするのが文字化けしているかの確認方法で一番簡単そうです