2012-04-17 12 views
2

中国語の名前を持つファイルにコンテンツを出力するようなものを試しています。Prelude.writeFile中国語のファイル名

ファイルは正しい内容で作成され、ファイル名では作成されませんでした。

私は関数writeFile^1を見て、それはStringを使ってファイル名を表しています。 これは根本的な原因である可能性があります。

file :: FilePath 
    file = "上海万达影城.html" 

    content :: String 
    content = "<h1>hello</h1>" 

    write2File :: IO() 
    write2File = writeFile file content 

おかげであなたの助け!

-Simon

---------------------私の側でGHCは7.0.2

  • ある

    1. を更新しましたアップグレード前の回避策以下に詳細と

      import qualified Codec.Binary.UTF8.String as UTF8 
      file = UTF8.encodeString "上海万达影城.html" 
      
  • +0

    http://stackoverflow.com/questions/3412577/haskell-char-unicode-and-turkish –

    +0

    あなたが持っているものコンパイラバージョンやOS GHC-7.4.1とここ作品? –

    +0

    @ダニエル、私はghc-7.0.2で実際に作業していますので、私は最初にDietrich Eppが言及した解決策を試してみると思います。 – Simon

    答えて

    3

    文字列のようなコードの変化を参照すると、HaskellではUnicodeコードポイントのリストです。 Unicodeコードポイントのリストの解釈はシステムに依存します。 (これをサポートするにはあまりにも古いGHCも必要です)。

    一般的には、ロケールが正しく設定されていれば、機能するだけです。


    N.B.過去に警告がありました。古いバグ:System.Directory.getDirectoryContents unicode support - これには回避策が伴う可能性があります。

    +0

    ありがとうございました。回避策は魅力のように機能します。 – Simon

    0

    その間、System.Posix.IO.ByteStringモジュールを使用できます。これにより、ファイルパスをバイト列として指定できるので、エンコード/デコードを自分で行うことができます。

    これは既知のバグであり、7.2.1で修正されています。

    http://hackage.haskell.org/trac/ghc/ticket/3307

    +0

    unix-2.5。*パッケージに 'System.Posix.IO.ByteString'がありますが、私はunix-2.4で作業しています。私はGHCをアップグレードする機会を得た後、もう一度検証します。ディートリッヒに感謝します。 – Simon

    関連する問題