指定した文字列が、対象の文字コードにおいてサポートされているかどうかを調べたい場合、CharsetEncoder.canEncode
を利用すると便利です。これは引数として与えられたメソッドが対象の文字コードでサポートされている場合true、それ以外はfalseを返すメソッドで、たとえば文字列s
がShift_JISにおいてサポートされているかを調べたい場合は次のように書けばよいです。
String s = "...";
Charset.forName("Shift_JIS").newEncoder().canEncode(s);
実際に動いているかを検証する例として、「髙」という漢字を利用します。いわゆる「はしごだか」ですね。この漢字はShift_JISではサポートされていないのですが、その拡張であるWindows-31Jではサポートされています。これを確かめてみましょう。
Charset.forName("Shift_JIS").newEncoder().canEncode("髙"); //=> false
Charset.forName("Windows-31J").newEncoder().canEncode("髙"); //=> true
想定通り動作していそうですね(´・ω・`)
環境情報:
C:\>javac -version
javac 11.0.3
C:\>java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)