System.Directory.getDirectoryContents unicode支持

时间:2011-07-24 12:05:26

标签: haskell unicode ghc

以下代码打印类似°Ð½Ð´Ð¸Ñ-ÐÑпаниÑ

的内容
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

2 个答案:

答案 0 :(得分:5)

以下是使用decodeString中的encodeStringutf8-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,它提供了表示文件路径的抽象数据类型。我已经广泛使用它来处理一些内部代码,它的工作非常好。