如何使Haskell或ghci能够显示汉字并运行汉字命名脚本?
我想制作一个Haskell脚本来读取my/home文件夹中的文件。但是,有许多文件使用汉字命名,Haskell和Ghci无法管理。Haskell和Ghci似乎不擅长显示UTF-8字符 以下是我遇到的情况:如何使Haskell或ghci能够显示汉字并运行汉字命名脚本?,haskell,unicode,character,cjk,ghci,Haskell,Unicode,Character,Cjk,Ghci,我想制作一个Haskell脚本来读取my/home文件夹中的文件。但是,有许多文件使用汉字命名,Haskell和Ghci无法管理。Haskell和Ghci似乎不擅长显示UTF-8字符 以下是我遇到的情况: Prelude> "让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档" "\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27
Prelude> "让Haskell或者Ghci能正确显示汉字并且读取汉字命名的文档"
"\35753Haskell\25110\32773Ghci\33021\27491\30830\26174\31034\27721\23383\24182\19988\35835\21462\27721\23383\21629\21517\30340\25991\26723"
GHC处理unicode非常好。以下是你应该知道的事情:
它使用您的系统编码从字节转换为字符,并在从控制台读取或写入时返回。因为它在您的示例中正确地完成了从字节到字符的转换,所以我认为您的系统编码设置正确
String
上的show
函数的输出字符集有限。GHCI使用show
函数打印表达式求值的结果,print
函数将传入的值转换为字符串
表示
putStr
和putStrLn
函数用于将String
完全按照提供给它们的方式写入控制台。多亏了卡尔,我使用了putStrLn
作为我功能的包装:
ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']]
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!")
ХА
ghci>让removeNonUppercase st=[c|c putStrLn(removeNonUppercase“а-а-а-а!А-а-а!”)
ХА
一切正常!这并不能真正回答您的问题,但我要说明的是,使用
putStrLn
和朋友打印字符串的程序不会出现此问题。此外,可能对您有所帮助。我尝试了“hGetLine h>>=hPutStr g”与目标g对应的文件确实得到了正确的内容。但是ghci不能正常显示汉字。@user1926094:与其说是“不能”,不如说是“不”。它选择对其进行转义,因为转义版本不能被您的终端、字体或其他任何东西弄乱。
ghci> let removeNonUppercase st = [c | c <- st, c `elem` ['А'..'Я']]
ghci> putStrLn (removeNonUppercase "Ха-ха-ха! А-ха-ха!")
ХА