haskell-servant/servant

UTF-8 `É` incorrectly read as `Ã`

Open

#1239 opened on Nov 5, 2019

View on GitHub
 (4 comments) (0 reactions) (0 assignees)Haskell (1,953 stars) (422 forks)batch import
bughelp wanted

Description

Hello, I've noticed that my Servant handler is incorrectly reading É as Ã. I've been able to isolate it to the handler, but no luck beyond that.

Mac: macOS Mojave - Version 10.14.6 Stack: Version 2.1.3, Git revision 0fa51b9925decd937e4a993ad90cb686f88fa282 (7739 commits) x86_64 hpack-0.31.2 GHC: The Glorious Glasgow Haskell Compilation System, version 8.4.3

When submitting the following request:

curl -i -X POST -H "Content-Type: text/plain; charset=utf-8" --data "{\"constraints\": [{\"column\": \"author\", \"values\": [\"CÉZANNE, Paul\"]}]}" http://localhost:8080/myEndpoint

... To the following Servant handler:

queryPaintings :: Pool Connection -> String -> Handler PaintingsResponse
queryPaintings conns constraintsInfo =
		...
      withResource conns $ \conn -> do
        _ <- putStrLn $ "constraintsInfo: " ++ constraintsInfo
        _ <- putStrLn "CÉZANNE, Paul"
		...

... Those putStrLn lines give:

constraintsInfo: {"constraints": [{"column": "author", "values": ["CÉZANNE, Paul"]}]}
CÉZANNE, Paul

Question:

Why, in the first line, do I have CÃZANNE instead of the desired CÉZANNE?

(I’ve alternatively tried having curl read a UTF-8 formatted text file — but same result.)

Many thanks in advance for your help.

Contributor guide