
Hi! I noticed that spawn mangled my unicode characters - instead of my unicode character the called program recieved garbage. Looking deeper I found out that spawn pre-processes the string with `encodeString` function. `encodeString` first converts [Char] into [Word8], and then converts each individual Word8 back into Char. Since unicode Char will be converted into multiple Word8, the resulting string would be quite different. Example: Prelude> import Codec.Binary.UTF8.String Prelude Codec.Binary.UTF8.String> encodeString "Ø" "\195\152" Prelude Codec.Binary.UTF8.String> putStrLn "Ø" Ø Prelude Codec.Binary.UTF8.String> putStrLn $ encodeString "Ø" ÃPrelude Codec.Binary.UTF8.String> Is there a reason why xmonad uses `encodeString` here? I implemented a copy of the function that doesn't use `encodeString`, seems to work okay: safeSpawnUnicode :: MonadIO m => FilePath -> [String] -> m () safeSpawnUnicode prog args = io $ void $ forkProcess $ do uninstallSignalHandlers _ <- createSession executeFile prog True args Nothing Best regards, Platon Pronko