
Pupeno wrote:
Hello, I am trying to make a program that outputs some Unicode characters but the output doesn't match what I try to print. Attached is a little test program. It tries to print the arrows "←↑→↓" but instead it outputs "\220\221\222\223" (that is, character number 220, then 221, then 222). I've also tried writing the Unicode code points (although GHC 6.6 should deal just fine with Unicode source code) and I get the same result. In case anybody wants to try, this would be the string: "\8592\8593\8594\8595". I am also attaching the output file, you can see that the contents are not right. Any ideas what am I doing wrong here ? Thank you.
------------------------------------------------------------------------
import qualified System.IO as IO
main = do let str = "←↑→↓" putStrLn str h <- IO.openFile "test.output" IO.WriteMode IO.hPutStrLn h str
The problem is with the output of putStrLn. You need to encode the string into utf8. You can find several modules on the web, i have been using this one: http://www.haskell.org/pipermail/haskell-i18n/2004-February/000127.html