文字コード変換メソッド
Implicit conversionsの練習として、文字コード変換メソッドを書いてみた。
Stringクラス自体にメソッドを追加するのではなくて、元クラスにメソッドがなかったときに、
自動的に変換処理を実行して、変換先のメソッドを使うようにするというのはおもしろい。
import java.nio._ import java.nio.charset._ class MBString(s:String){ val cb = CharBuffer.wrap(s) def encode(c:String) = Charset.forName(c).newEncoder.encode(cb).array } class MBArray(a:Array[Byte]){ val bb = ByteBuffer.wrap(a) def decode(c:String) = Charset.forName(c).newDecoder.decode(bb).toString } object Uconv extends Application{ implicit def str2mbstr(s:String) = new MBString(s) implicit def ary2mbary(a:Array[Byte]) = new MBArray(a) val s = Array(0xCE,0xA9).map(_.toByte) println(s.toString) println(s.decode("UTF-8")) println(s.decode("EUC-JP")) println(s.decode("Shift_JIS")) println("Ω".encode("UTF-8").toString) }
実行結果
Stringから各文字コードにエンコードするとArray[Byte]になる。
Array(-50, -87) Ω 立 ホゥ Array(-50, -87)
追記
わざわざメソッドを作らなくても以下の方法でよかった…
"Ω".getBytes("UTF-8") new String(s,"UTF-8")