System.Directory.getDirectoryContents поддержка юникода - PullRequest
4 голосов
/ 24 июля 2011

Следующий код печатает что-то вроде °Ð½Ð´Ð¸Ñ-ÐÑпаниÑ

getDirectoryContents "path/to/directory/that/contains/files/with/nonASCII/names"
  >>= mapM_ putStrLn

Похоже, это ошибка ghc , и она уже исправлена ​​в репозитории. Но что делать, пока все не обновят ghc?

В последний раз, когда я сталкивался с такой проблемой (кстати, это было несколько лет назад), я использовал пакет utf8-string для преобразования строк, но я не помню, как я это сделал, и поддержка unicode в ghc была видна последней года.

Итак, каков наилучший (или хотя бы работающий) способ получения содержимого каталога с полной поддержкой юникода?

GHC версия 7.0.4 язык en_US.UTF-8

Ответы [ 2 ]

5 голосов
/ 24 июля 2011

Вот простой способ, используя 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

Выход:1012 *

.
..
brøken-file-nåme.txt
Broken.hs
------------
hello
3 голосов
/ 24 июля 2011

Я бы рекомендовал посмотреть system-filepath , который предоставляет абстрактный тип данных для представления путей к файлам.Я широко использовал его для внутреннего кода, и он прекрасно работает.

...