在Windows上使用GHCi:如何从控制台读取Unicode输入?

9
如何在命令提示符/ LameShell 中使用 Unicode(CJK)使以下代码正常工作?
main = getLine >>= putStrLn

(Windows 8.1, Haskell Platform 2014)

不,chcp 65001chcp 10000 都不行。

我不想将系统区域设置(控制面板/时钟、语言和区域/语言/更改日期、时间或数字格式/管理)从英语(美国)改为其他语言。

是的,我已将字体设置为 Lucida Console。

我尝试过 ConEmu/Cmder/Console2,它们都显示“Exception: : hGetLine: end of file”。我还尝试了 Emacs(我使用 Vim),它没有崩溃,但无论我输入什么,我总是得到空格。

如果没有其他方法,补丁 GHC 并重新编译是可以接受的。

有什么建议吗?

谢谢。


你尝试过在 System.IO 中使用 hSetEncoding 吗? - Arnon
不起作用。在执行了 chcp 65001 后,hGetEncoding stdin 已经返回了 Just UTF-8,我仍然尝试了 hSetEncoding stdin utf8,但没有成功。 - Not an ID
我之前在CentOS上遇到过这个问题,当时我使用hSetEncoding解决了它。但现在在我的Windows 8上似乎不起作用...真的很奇怪。也许暂时打补丁修复GHC是正确的处理方式。 - Arnon
无论如何,谢谢。这似乎是一个明显的错误,我只是不相信它还没有被修复。 - Not an ID
这可能是Unicode控制台I/O在Windows上的Haskell的重复问题。 - Cirdec
1个回答

1

PowerShell原生支持UTF。假设我正确理解了您的示例(main = getLine >>= putStrLn):

$var = Read-Host
Write "$var"

或者简单地说:

Read-Host

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接