こんにちは、最近は Go か Java しか書いていない米林です。
UnsupportedEncodingException 嫌い
Java開発において String.getBytes("UTF-8")
や new String(byte[], "UTF-8)
する際に、毎回 UnsupportedEncofingException を try-catch したり throws に追加して「"UTF-8"はサポートしてるだろう」と思いながら仕方なく書いてた人は日本 には多数いるはずです。
コードとしてはこんな感じ、Java 開発者なら「あー、これね」と頷くレベルですね。
private void getBytes() {
final String msg = "ABC";
try {
final byte[] bytes = msg.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
// 起こり得ないけど書いてます...
}
}
// throws UnsupportedEncodingException これも起こらないけど書く
private String getString(final byte[] bytes) throws UnsupportedEncodingException {
final String str = new String(bytes, "UTF-8");
return str;
}
コードから UnsupportedEncodingException を消す
Java7 からは try-catch, throws で UnsupportedEncodingException を書かなくて良い方法があります。
String クラスの new String()
, String.getBytes()
に java.nio.charset.Charset
を引数に指定するメソッドが 1.6 から追加されています。
StandardCharsets 大好き
Java7からは、java.nio.charset.StandardCharsets
が追加されました。
StandardCharsets.UTF_8
万歳!
Examples
private void getBytes() {
final String msg = "ABC";
final byte[] bytes = msg.getBytes(StandardCharsets.UTF_8);
}
private String getString(final byte[] bytes) {
final String str = new String(bytes, StandardCharsets.UTF_8);
return str;
}
これで全国の Java 開発者の笑顔を取り戻せそうです!
Be careful.
StandardCharsets を見れば分かりますが、Java 開発者にお馴染みである "MS932" や "Windows-31j" はスタンダードでは無いため、この記事を見て早速 StandardCharsets.
で補完しても出てきませんので、そういう場合は諦めて UnsupportedEncodingException と共に生きて行きましょう!
弊社では絶賛社員募集です!