我使用windows 10和powershell,看起来Haskell在stdin上有一些UTF编码问题:
> chcp 65001
> stack ghci
...
> putStrLn "자"
자
> x <- getLine
자
> x
"\EOT"
> interact id
자
╝
答案 0 :(得分:1)
我怀疑GHC正在运行latin1编码(或类似的),而putStrLn "자"
只能偶然使用。您可以按如下方式检查:
> import System.IO
System.IO> hGetEncoding stdin
如果回复UTF-8
我的假设是错误的。但是,如果它使用UTF-8
之外的其他内容进行回复,则可以使用hSetEncoding
显式声明控制台所期望的编码:
System.IO> hSetEncoding stdin utf8
您可能还想对stdout
和stderr
执行此操作。有关详细信息,请参阅the documentation。