文字コード変換メソッド

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")