我想制作一个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"
答案 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
表示。
putStr
和putStrLn
函数用于向控制台实际写入String
,与提供给它们完全相同。
答案 1 :(得分:0)
感谢Carl,我使用putStrLn
作为我的功能包装:
ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']]
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!")
ХА
一切正常!