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
で変換してから表示。
文字列難しい
[参考]