2011-07-24 7 views
4

°Ð½Ð´Ð¸Ñ-ÐÑпаниÑSystem.Directory.getDirectoryContents Unicodeサポート

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

などは、以下のコードを印刷し、何かが見えます。しかし、誰もがghcをアップグレードするまで何をすべきでしょうか?

私がこのような問題に遭遇したのは、数年前のbtwでしたが、utf8-stringパッケージを使用して文字列を変換しましたが、私はどのようにしたのか覚えていません。最後の年。

したがって、完全なユニコードサポートでディレクトリの内容を取得するには、どのような方法(または少なくとも動作しますか)は?

GHCのバージョン7.0.4 ロケールEN_US.UTF-8

答えて

5

はこちらutf8-stringからdecodeStringencodeStringを使用して簡単な回避策です。

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 

出力:私はファイルパスを表すための抽象データ型を提供system-filepath、見て推薦する

. 
.. 
brøken-file-nåme.txt 
Broken.hs 
------------ 
hello 
+0

ありがとうございます。新しいghcでも使えますか? – Yuras

+0

@Yuras:私が理解しているように、 'base'はUTF8変換自体になります。適切なバージョンの' base'を使用すると、条件付きコンパイルを使用して変換を削除することができます。ありがとう。 – hammar

3

。私はいくつかの内部コードのためにそれを広範囲に使用してきました。

+0

それは 'fixName = encodeStringのようなものです。 fromText。 T.パック ' –

関連する問題