URLエンコードされている文字列をUTF-8に変換することがあります。
String urlEncodedString = "http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=%E6%97%A5%E6%9C%AC%E8%AA%9E";
URLDecoder.decode(urlEncodedString, "UTF-8");
という具合に。
このときにURLDecoder.decode
の第2引数にはエンコーディング方式を指定しますが、UTF-8を指定したいときにどのように書けば正解なのか迷うことがあります。
ちなみに、次の4つのうち、指定するとUnsupportedEncodingException
になるものがあります。わかりますか?
- UTF-8
- UTF_8
- utf-8
- UTF8
(もしかすると、Javaのバージョンなどによってどれが動作するかが違うかもしれません。未確認。)
こう書けば迷わない
そもそも私たちが文字列でエンコーディング方式を指定するから、typoや動作するかのチェックに気を使うわけです。
なので、これから私はこのように書こうと思います。
URLDecoder.decode(urlEncodedString, StandardCharsets.UTF_8.name());
StandardCharsets.UTF_8
はCharset
型の定数です。
Charset
のname
メソッドで文字セットの名称を取得することができます。
こうすれば私たちがエンコーディング方式をあらわす文字列をタイピングして直接指定しなくてよくなるので、どう書くといいかで迷わなくなります。