如何让Haskell或ghci能够显示中文字符并运行名为scripts的汉字?

时间:2012-12-26 11:07:14

标签: haskell unicode character cjk ghci

我想制作一个Haskell脚本来读取/ home文件夹中的文件。但是有许多以中文字符命名的文件,而Haskell和Ghci无法管理它。似乎Haskell和Ghci不擅长显示UTF-8字符。

这是我遇到的:

Prelude> "让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档"

"\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723"

2 个答案:

答案 0 :(得分:21)

Prelude> putStrLn "\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723"
让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档

GHC处理unicode就好了。这些是你应该知道的事情:

它使用您的系统编码从字节转换为字符,并在读取或写入控制台时返回。由于它在您的示例中正确地将字节转换为字符,因此我说您的系统编码设置正确。

show上的String函数具有有限的输出字符集。 GHCI使用show函数打印评估表达式的结果,并使用print函数将传入的值转换为String表示。

putStrputStrLn函数用于向控制台实际写入String,与提供给它们完全相同。

答案 1 :(得分:0)

感谢Carl,我使用putStrLn作为我的功能包装:

ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']]
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!")
ХА

一切正常!