// 元の文字列
String text = "﨑崎髙高濵濱德徳曻昇𠮷吉瀨瀬abcABC012+-*@";
System.out.println(text);
// シフトJISに変換(変換できない文字は "?" になる)
Charset charset = Charset.forName("Shift_JIS");
System.out.println(new String(text.getBytes(charset), charset));
// シフトJISに変換(変換できない文字は "□" になる)
CharsetEncoder encoder = charset.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE)
.replaceWith("□".getBytes(charset));
ByteBuffer bb = encoder.encode(CharBuffer.wrap(text));
byte[] bytes = new byte[bb.remaining()];
bb.get(bytes);
System.out.println(new String(bytes, charset));
﨑崎髙高濵濱德徳曻昇𠮷吉瀨瀬abcABC012+-*@
?崎?高?濱?徳?昇?吉?瀬abcABC012+-*@
□崎□高□濱□徳□昇□吉□瀬abcABC012+-*@
String の getBytes メソッドでシフトJISの Charset を指定するとシフトJISのbyte配列を取得することができます。そのbyte配列を元にStringをnewすれば文字列を取得できます。
シフトJISにコード割当がない文字は ? に置換されます。
? ではなく別の文字に置換したい場合は CharsetEncoder を使って replaceWith メソッドに指定した文字で置換できます。
コメント