UTF-8へのエンコードは2種類ある。
1 2 3 4 5 6 7 |
module Main (main) where import qualified Codec.Binary.UTF8.String as US main = do s < -getContents print $ US.encode s print $ US.encodeString s |
1 2 3 |
$ ./main あ[227,129,130] "\227\129\130" |
1 2 3 4 5 6 |
Prelude> :m + Codec.Binary.UTF8.String Prelude Codec.Binary.UTF8.String> :t encode encode :: String -> [GHC.Word.Word8] Prelude Codec.Binary.UTF8.String> :t encodeString encodeString :: String -> String Prelude Codec.Binary.UTF8.String> |
どちらもUTF-8のコード並びに変換されるが、encodeはWord8、encodeStringはStringの配列に格納される。
最初のStringはUnicodeスカラ値でUnicodeの文字集合全体を扱える。encodeStringはUTF-8にencodeするけれど、Stringに格納するのは混乱がでるかな。できればStringはUnicodeスカラ値のクラスとして統一してほしいところ。