我使用Windows 10和PowerShell,似乎Haskell从标准input使用UTF编码有一些问题:
> chcp 65001 > stack ghci ... > putStrLn "자" 자 > x <- getLine 자 > x "\EOT" > interact id 자 ╝
我怀疑GHC正在使用latin1编码(或类似的), putStrLn "자"
只是偶然的工作。 你可以检查如下:
> import System.IO System.IO> hGetEncoding stdin
如果这个答复与UTF-8
我的假设是错误的。 但是,如果使用UTF-8
以外的其他方式回复,则可以使用hSetEncoding
显式声明控制台所期待的编码:
System.IO> hSetEncoding stdin utf8
你可能也想为stdout
和stderr
做这个。 请参阅文档了解更多详情。