Always read the config file in UTF8 mode
authorJoachim Breitner <mail@joachim-breitner.de>
Thu, 15 Oct 2015 21:23:05 +0000 (21:23 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Thu, 15 Oct 2015 21:23:05 +0000 (21:23 +0000)
Local-dependent IO is all right for stdin and stdout, as that (usually)
interacts with the user’s terminal, but the configuration should work
independent of the current locale of the user.

This should also allow the test suite to pass in WINE, despite my inability to
make WINE use a UTF8 codepage:  http://stackoverflow.com/questions/33156758

src/Categorize.hs

index ff8c063..cb12358 100644 (file)
@@ -20,6 +20,7 @@ import Text.Parsec.Token
 import Text.Parsec.Combinator
 import Text.Parsec.Language
 import Text.Parsec.ExprFail
+import System.IO
 import System.Exit
 import Control.Applicative ((<*>),(<$>))
 import Control.DeepSeq
@@ -77,7 +78,9 @@ newtype Cmp = Cmp (forall a. Ord a => a -> a -> Bool)
 
 readCategorizer :: FilePath -> IO Categorizer
 readCategorizer filename = do
-        content <- readFile filename
+        h <- openFile filename ReadMode
+        hSetEncoding h utf8
+        content <- hGetContents h
         time <- getCurrentTime
         tz <- getCurrentTimeZone
         case flip runReader tz $