2018/02/27

http-conduit で取得したデータを日本語表示する

簡単なcliツールを書こうとしたら http-conduit で取得したデータの日本語表示でハマってしまいました。

http-conduithttpLbs で取得したデータをそのままターミナルに出力します。
必要なパッケージは 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 型で包まれているので getResponseBodyByteString を取得し、 String に変換して出力します。
なぜか ByteString でなく ByteString.Lazy になっていたので toStrict で変換。
そして unpack しても日本語が表示されないため、 Codec.Binary.UTF8.StringdecodeString で変換してから表示。

文字列難しい

[参考]

Haskellから簡単にWeb APIを叩く方法 - Qiita

Haskell 文字列変換入門 - Qiita


© 2022 wat-aro