Yur*_*ras 4 unicode haskell ghc
以下代码打印出类似的内容 °Ð½Ð´Ð¸Ñ-ÐÑпаниÑ
getDirectoryContents "path/to/directory/that/contains/files/with/nonASCII/names"
>>= mapM_ putStrLn
Run Code Online (Sandbox Code Playgroud)
看起来它是一个ghc bug,它已经在存储库中修复了.但是在每个人升级ghc之前该怎么办?
我最后一次遇到这样的问题(就在几年前,顺便说一下),我用utf8-string包来转换字符串,但我不记得我是怎么做到的,并且ghc unicode支持在去年明显改变了.
那么,获得完整unicode支持的目录内容的最佳(或至少是工作)方式是什么?
ghc版本7.0.4 locale en_US.UTF-8
这是一个简单的解决方法,使用decodeString和encodeString来自utf8-string.
import System.Directory
import qualified Codec.Binary.UTF8.String as UTF8
main = do
getDirectoryContents "." >>= mapM_ (putStrLn . UTF8.decodeString)
putStrLn "------------"
readFile (UTF8.encodeString "brøken-file-nåme.txt") >>= putStrLn
Run Code Online (Sandbox Code Playgroud)
输出:
.
..
brøken-file-nåme.txt
Broken.hs
------------
hello
Run Code Online (Sandbox Code Playgroud)