【发布时间】:2021-06-29 21:24:04
【问题描述】:
下面的简单代码在带有 UTF-8 字符的 Windows 终端中无法正常工作,无论是来自 Prelude 还是来自 Data.Text.IO 的 getLine/putStrLn:
main = forever $ getLine >>= putStrLn
它在输入过程中回显 utf-8 字符,然后打印“?”代替 utf-8 字符;使用chcp 65001 切换编码会使它们变成空格。
我已按照this page 的建议下载了新终端并启用了 utf-8 支持,但没有任何效果。
This explanation 似乎相关,但那里提出的解决方案不起作用(代码也是如此)。
显然python有一个similar issue
是否有任何适用于 GHC 8.x 的库/解决方法?
请帮忙!
编辑:经过更多调查,问题也出在输入过程中 - 如果不是 putStrLn 我用 mapM_ (print . ord) s 打印字符代码,它们要么都是 63 而没有更改编码,要么是 chcp 65001 之后的 0。
hSetEncoding stdin utf8 没有帮助
【问题讨论】:
-
您使用的是哪个 Windows 版本?
-
是windows 10
标签: haskell utf-8 terminal console