HaskellでUTF-8をバイトごとに分解

めも。

% cabal install utf8-string

Codec.Binary.UTF8.Stringを導入し、encodeStringする。


unpack-utf8.hs

import Codec.Binary.UTF8.String
import System.Environment

main = do cs <- getArgs
          print $ head cs
          print $ encodeString $ head cs

実行してみる。

% ghc unpack-utf8.hs
% ./unpack-utf8 あ
"\12354"
"\227\129\130"


どうしてもCodec.Binary.UTF8.Stringを入れたくないときは、

import Data.String
import Data.Text.Encoding
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as C
import System.Environment

unpackUTF8 :: String->String
unpackUTF8 = C.unpack . encodeUtf8 . fromString

main = do cs <- getArgs
          print $ head cs
          print $ unpackUTF8 $ head cs

とかやれば同じ結果が得られそうです。