33 lines
937 B
Haskell
33 lines
937 B
Haskell
module System.IO.Encoding
|
|
(getSystemEncoding
|
|
,hPutStr
|
|
,hGetContents) where
|
|
|
|
import Foreign.C.String
|
|
|
|
import Data.Encoding
|
|
import System.IO hiding (hPutStr,hGetContents)
|
|
import qualified Data.ByteString.Lazy as BS
|
|
|
|
-- | Like the normal 'System.IO.hGetContents', but decodes the input using an
|
|
-- encoding.
|
|
hGetContents :: Encoding e => e -> Handle -> IO String
|
|
hGetContents enc h = do
|
|
str <- BS.hGetContents h
|
|
return $ decodeLazy enc str
|
|
|
|
-- | Like the normal 'System.IO.hPutStr', but encodes the output using an
|
|
-- encoding.
|
|
hPutStr :: Encoding e => e -> Handle -> String -> IO ()
|
|
hPutStr enc h str = BS.hPut h (encodeLazy enc str)
|
|
|
|
foreign import ccall "system_encoding.h get_system_encoding"
|
|
get_system_encoding :: IO CString
|
|
|
|
-- | Returns the encoding used on the current system.
|
|
getSystemEncoding :: IO DynEncoding
|
|
getSystemEncoding = do
|
|
enc <- get_system_encoding
|
|
str <- peekCString enc
|
|
return $ encodingFromString str
|