椿の日記

たぶんプログラムの話をします

デリミタを利用して少しずつ評価

接続先は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

うーん、今回は問題ないけど、改行がない場合とかだったらどうなることやら…