TIM Labs

漢字の文字コードの確認

| コメント(0) | トラックバック(0)

Haskells.jpg

『関数プログラミング入門』 2.2 文字 のところをで文字処理が若干書かれているが、漢字(Unicode)に限ってちょっといじってみた。

新しいGHCiでは、漢字に対応している、というかUnicodeに対応しているようなので、もうちょっと確認してみた。

漢字を文字および文字列として表示してみると、次のようになる。

Prelude> show '一'
"'\\19968'"
Prelude> show "漢字"
"\"\\28450\\23383\""
Prelude>

ユニコードの10進数表示で出てきてしまった。 文字として、そのまま表示すのに putChar, putStrLn を使ってみた。 Ln をつけると、予想通り改行される。

Prelude> putChar '一'
一Prelude> putStrLn "漢字"
漢字

では、 '一' を数字に直してみようということで、ordを使ってみた。

すると、

Prelude> ord  '一'

<interactive>:10:1:
    Not in scope: `ord'
    Perhaps you meant one of these:
      `odd' (imported from Prelude), `or' (imported from Prelude)

となって、 ord など存在しないと叱られた。

Prelude> import Data.Char
Prelude Data.Char> ord '一'
19968

Data.Char をインポートしてからやると、ちゃんと10進整数表示になった。

chr で元の文字に戻してみよう。

Prelude Data.Char> chr (ord  '一')
'\19968'

しかし、これでは文字が数字になって出るだけで訳が分からない。 文字出力の putChr を使ってみよう。

Prelude Data.Char> putChar (chr (ord '一'))
一

確かに元に戻せている。

さて、数字に直せるということは、ユニコード上の次の漢字を出すなどできるはずだ。 ということで、 '一' より文字コードが3だけ大きい文字を調べてみよう。

Prelude Data.Char> putChar (chr (ord '一' + 3))
七

'一' の3つ先の文字は、四かと思ったら七になってしまった。 大丈夫か?

実は、文字コードの指定に、16進数表記も使える。 コードを直接指定するのはこちらの方が便利である。 ということで、同じことをやってみた。

Prelude Data.Char> putChar (chr (ord '\x4e00' + 3))
七

ちゃんと動くようだ。

文字の演算をすると、色々おもしろいこともあるが、深入りは避けておこう。 日本語文字列も、やろうと思えばできるかな。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/324

コメントする

このブログ記事について

このページは、fujiが2012年11月 8日 15:34に書いたブログ記事です。

ひとつ前のブログ記事は「Haskellで自然数を定義してみる」です。

次のブログ記事は「階乗とフィボナッチの計算負荷は凄い!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。