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