System.Directory.getDirectoryContents unicode支持

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

ham*_*mar 5

这是一个简单的解决方法,使用decodeStringencodeString来自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)