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