デリミタを利用して少しずつ評価
接続先はIRCなんですが、IRCの文字コードはISO-2022-JPで、かつプロトコル的にコマンドは必ず改行で終わるため、
改行コードを使ってStringを分割し、各StringごとにIConvで変換するという方法を取りました。
import Codec.Text.IConv (convert) import qualified Data.ByteString.Lazy as L import Data.ByteString.Internal (w2c, c2w) convertString :: String -> String -> String -> String convertString fromcode tocode = (map w2c) . (L.unpack) . convert fromcode tocode . (L.pack) . (map c2w) main :: IO () main = do ... cs <- hGetContents sock let decoded_cs = unlines $ map (convertString "ISO-2022-JP" "CP932") $ lines cs
うーん、今回は問題ないけど、改行がない場合とかだったらどうなることやら…