ShiftJISに無い文字を検出する方法


与えられた文字列について、UTF-8に定義されているがShiftJIS（正確にはCP932）に定義されていない文字があるかどうか検出する方法はありますか？  
文字コードの変換のやり方は結構見つかりますが、ちゃんと変換できたのかどうかを判定したいのです。  
※ShiftJISしか使えない旧システムとの連携があるため、「旧システムに渡せない文字」をユーザが入力したとき、弾けるように・・・  
Java8を使っています。




UTF-8の入力文字列(Java内部ではUnicode)をCP932バイト列に変換して、それを再度UTF-8に変換(逆変換)して、同じ内容にならなければ、その差分が定義されていない文字と判定する方法があると思います。

＃変換中にExceptionが発生すれば、その時点で定義されていない文字が含まれていることがわかります。

ただ、「旧システム」がCP932文字ならすべて受け取れるのか怪しいので、通常は流通可能な文字集合(ホワイトリスト)を規定して、入力文字(を変換したもの)をホワイトリストと比較する方法の方が確実かと思います。




UTF-8の入力文字列(Java内部ではUnicode)をCP932バイト列に変換して、それを再度UTF-8に変換(逆変換)して、同じ内容にならなければ、その差分が定義されていない文字と判定する方法があると思います。

＃変換中にExceptionが発生すれば、その時点で定義されていない文字が含まれていることがわかります。

ただ、「旧システム」がCP932文字ならすべて受け取れるのか怪しいので、通常は流通可能な文字集合(ホワイトリスト)を規定して、入力文字(を変換したもの)をホワイトリストと比較する方法の方が確実かと思います。

