kenkovlog

Haskell, Python, Vim, ...

Haskell も文字列と文字コードについて

Haskell の文字列と文字コードについて。

例えば日本語文字列をprint で表示してみると、

Prelude> print "こ"
"\12371"

と表示されます。
これは、 Unicode のコードポイント と呼ばれるものが表示されています。

次に、文字列をCodec.Binary.UTF8.String.encodeString を使ってUTF8 文字列に直してから表示してみると

Prelude> :m + Codec.Binary.UTF8.String
Prelude Codec.Binary.UTF8.String> print $ encodeString "こ"
"\227\129\147"

と表示されます。
これは、 "こ"のコードポイントに対応するUTF8 エンコーディング が表示されています。

Haskell のコード内で文字列をUTF8 エンコードする処理が必要な場合には、Codec.Binary.UTF8.String モジュールを使うとよいでしょう。
このモジュールを使うためにはcabal で utf8-string をインストールしましょう。

$ cabal install utf8-string

また、

Prelude> putStrLn "こんにちは"
"こんにちは"

といったように、putStrLn を使って表示をした場合や、ファイル入出力を
行う際には、(最新のHaskell Platform を使用しているならば)System.IO が
自動的にHaskell の内部文字列とUTF8 文字列の変換をしてくれるようです。

に詳しく書かれているので参照してください。