以下代码打印类似°Ð½Ð´Ð¸Ñ-ÐÑпаниÑ
getDirectoryContents "path/to/directory/that/contains/files/with/nonASCII/names"
>>= mapM_ putStrLn
看起来它是一个ghc bug,它已经在存储库中修复了。但是在每个人升级ghc之前该怎么做?
我上次遇到这样的问题(几年前,顺便说一下),我用utf8-string包来转换字符串,但我不记得我是怎么做的,并且ghc unicode支持明显改变了年。
那么,获得完全unicode支持的目录内容的最佳(或至少是工作)方式是什么?
ghc版本7.0.4 locale en_US.UTF-8
答案 0 :(得分:5)
以下是使用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
输出:
.
..
brøken-file-nåme.txt
Broken.hs
------------
hello
答案 1 :(得分:3)
我建议查看system-filepath,它提供了表示文件路径的抽象数据类型。我已经广泛使用它来处理一些内部代码,它的工作非常好。