diff --git a/src/Roux/RecipeIndex.hs b/src/Roux/RecipeIndex.hs index c467b2d..4dc5bcc 100644 --- a/src/Roux/RecipeIndex.hs +++ b/src/Roux/RecipeIndex.hs @@ -7,8 +7,11 @@ module Roux.RecipeIndex ( toSearchEntry, ) where +import qualified Data.ByteString as BS import Data.Text (Text) import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import qualified Data.Text.Encoding.Error as T import Fleece.Aeson (EncoderDecoder) import Fleece.Core (constructor, list, object, optionalNullable, required, text, (#+)) import qualified Fleece.Core as FC @@ -39,8 +42,9 @@ scanRecipes dir = do -- | Load and parse a single recipe file. loadRecipe :: FilePath -> FilePath -> IO RecipeInfo loadRecipe dir filename = do - content <- readFile (dir filename) - let parsed = parseCookFile (T.pack content) + bs <- BS.readFile (dir filename) + let content = T.decodeUtf8With T.lenientDecode bs + parsed = parseCookFile content title = case parsed of Right r -> extractTitle r filename Left _err -> T.pack (takeBaseName filename)