「"0123".getBytes("UTF-8")」といった処理を記述すると、UnsupportedEncodingExceptionをcatchする必要があります。Charsetというクラス(JDK1.4から導入)を使ったString#getBytes(Charset charset)(String (Java Platform SE 6))がJDK6から導入されており、これを使って文字列についてエンコードされたバイト列を取得することもできます。こちらを使うとUnsupportedEncodingExceptionではなく、UnsupportedCharsetExceptionといったRuntime Exceptionの例外を投げるようになるため、コード記述時にcatchする必要がなくなります。その結果、コードが見やすくなります。
package org.sssg.soft.sample.charset; import java.nio.charset.Charset; public class App { public void exec() { Charset cs = Charset.forName("UTF-8"); System.out.println(cs.name()); byte[] bs = "0123".getBytes(cs); for (int b : bs) { System.out.print(b + " "); } System.out.println(""); } public static void main(String[] args) { new App().exec(); } }
実行結果は次の通り。
UTF-8
48 49 50 51
48 49 50 51
こちらこそ、たびたびありがとうございます。JDK6からgetBytes(Charset cs)メソッドがサポートされたことを確認してから記事にしたことを、いま思い出しました。それで、Charsetは1.4と指摘されて調べたときに、getBytes(Charset cs)がJDK6からだということを忘れてて、Charsetが導入されたバージョンだけ確認して、納得して直してしまいました… 気をつけます。
訂正していただいたのに、申し訳ない
public byte[] getBytes(Charset charset)
が導入されてのはJDK6からでした。
Charset charsetはJDK1.4から導入されており、勘違いしておりました。
JDK1.4からサポートされてましたか。失礼しました。修正しました。
早速、取り上げていただいてありがとうございます。
java.nio.charset.Charset
はJDK1.4からnioが導入されたことによって追加されたクラスになります。
まだ、知らない方も結構いますね。