Groovyで文字と文字コードを相互変換する

文字列から文字コードを得る

コード
printf("%#x%n", (int)"a")

printf("%#x%n", (int)"cba"[2])

printf("%#x%n", (int)"あ")

printf("%#x%n", (int)"あいう"[0])

printf("%#x%n", (int)"あいう"[1])
実行結果
0x61
0x61
0x3042
0x3042
0x3044

マルチバイトもOK。


もろC言語的なの発想なのだが、Groovyistだとどうするんだろう。
これは、パッと見は、C言語だな。もうなんのコードだか分からんよなこれ。
%nは、改行コードの書式子でC言語にはないから、それで区別するんだろうか。






文字コードから文字列を得る

コード
println new String((char)Integer.decode("0x61"))

println new String((char)Integer.decode("0x3042"))

println ((Character)Integer.decode("0x61")).toString()

println ((Character)Integer.decode("0x3042")).toString()
実行結果
a
あ
a
あ

こちらもマルチバイトもOK。



文字列全体を文字コードの配列に変換する

コード
"aiueo".each{c ->
    codes.add(sprintf("%#x", (int)c))
}
println codes


codes = []
"あいうえお".each{ c ->
    codes.add(sprintf("%#x", (int)c))
}
println codes
実行結果
[0x61, 0x69, 0x75, 0x65, 0x6f]
[0x3042, 0x3044, 0x3046, 0x3048, 0x304a]

マルチバイトもOK。





添削

def charset = 'us-ascii'

println 'groovy'.getBytes(charset) // string to character codes
                                  
println new String([103, 114, 111, 111, 118, 121] as byte[], charset) // character codes to string

// groovier way that adding factory methods to convert character codes to string
String.metaClass.static.fromBytes << { charsetName, List bytes -> new String(bytes.toArray() as byte[], charsetName) }
String.metaClass.static.fromBytes << { charsetName, Object... bytes -> new String(bytes as byte[], charsetName) }

println String.fromBytes(charset, [103, 114, 111, 111, 118, 121])
println String.fromBytes(charset, 103, 114, 111, 111, 118, 121)

添削歓迎

ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバックはてブTwitter @orange_clover宛 で、お願いしまます。



実行環境

プログラミングGroovy 』に向けて、環境を1.8.0にした
過去の記事と比較するために、できるだけ同じ組み合わせ(Groovy:1.6.5,JVM:1.6.0_12)でやってたけど
最新で動かなきゃ意味ないからね。








Groovyの詳細についてはJavadocと以下の書籍を参考にしている。




Dierk Konig、Andrew Glover、Paul King、、Guillaume Laforge、Jon Skeet、杉浦 孝、櫻井 正樹、須江 信洋、関谷 和愛、佐野 徹郎、寺沢 尚史

Amazonでご確認ください。



問題自体は第2版のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。




青木 峰郎、後藤 裕蔵、高橋 征義、まつもと ゆきひろ

価格: ¥ 2,940
価格は記載時点のものです。購入前にAmazonでご確認ください。




Groovyイン・アクションを読むならあった方が便利かな。

Rubyレシピブックは「ほんたった」で立ててる