
Hi there, I want to read a unicode file and print it to screen. My terminal was unintentionally set to POSIX locale and that was the reason that it didn't work properly. When I added two hSetEncoding statements it worked fine, even under POSIX. Test file uc.in contains a simple line Möbius Château Here is the small test program I tried: <-----------------------------snip----------------------------> module Main where import System.IO import Text.Printf main :: IO () main = do h <- openFile "uc.in" ReadMode hSetEncoding h utf8 hSetEncoding stdout utf8 s <- hGetContents h print s putStrLn $ "File contains line: " ++ s printf "File contains line: %s\n" s <-----------------------------snap----------------------------> Both putStrLn, and printf work fine. When setting a different locale, e.g. en_GB.iso88591 then both putStrLn and printf work fine even if I haven't set encoding to utf in the source. Then I discovered System.IO.UTF8. However, when I use this as below then the output is garbled. <-----------------------------snip----------------------------> module Main where import System.IO import System.IO.UTF8 as U import Text.Printf main :: IO () main = do h <- openFile "uc.in" ReadMode hSetEncoding stdout utf8 s <- U.hGetContents h U.print s U.putStrLn $ "File contains line: " ++ s printf "File contains line: %s\n" s <-----------------------------snap----------------------------> Any idea why this won't work. -- Manfred