http-conduit で取得したデータを日本語表示する
簡単なcliツールを書こうとしたら http-conduit で取得したデータの日本語表示でハマってしまいました。
http-conduit の httpLbs で取得したデータをそのままターミナルに出力します。
必要なパッケージは http-conduit bytestring utf8-string の3つ。
{-# LANGUAGE OverloadedStrings #-} import qualified Codec.Binary.UTF8.String as Codec import Data.ByteString.Char8 (unpack) import Data.ByteString.Lazy (toStrict) import qualified Network.HTTP.Simple as Simple main :: IO () main = do res <- Simple.httpLbs "https://twitter.com/" putStrLn $ Codec.decodeString $ unpack $ toStrict $ Simple.getResponseBody res
httpLbs を使い取得したデータは Reponse 型で包まれているので getResponseBody で ByteString を取得し、 String に変換して出力します。
なぜか ByteString でなく ByteString.Lazy になっていたので toStrict で変換。
そして unpack しても日本語が表示されないため、 Codec.Binary.UTF8.String の decodeString で変換してから表示。
文字列難しい
[参考]