LoginSignup
50
35

More than 5 years have passed since last update.

Java で UnsupportedEncodingException を発生させなくする

Last updated at Posted at 2014-11-18

こんにちは、最近は Go か Java しか書いていない米林です。

UnsupportedEncodingException 嫌い

Java開発において String.getBytes("UTF-8")new String(byte[], "UTF-8) する際に、毎回 UnsupportedEncofingException を try-catch したり throws に追加して「"UTF-8"はサポートしてるだろう」と思いながら仕方なく書いてた人は日本 :flag_jp: には多数いるはずです。

コードとしてはこんな感じ、Java 開発者なら「あー、これね」と頷くレベルですね。

sample.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

sample.java
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 と共に生きて行きましょう!

弊社では絶賛社員募集:mahjong:です!

50
35
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
35