2

中国語の名前を持つファイルにコンテンツを出力するのが好きなものをテストしています。

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

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

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

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

    write2File :: IO ()
    write2File = writeFile file content

助けてくれてありがとう!

-サイモン

- - - - - - - - - - - 更新しました

  1. 私の側のGHCは7.0.2です
  2. アップグレード前に見つかった回避策。以下の詳細を参照してください。コードは次のように変更されます

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

2 に答える 2

3

文字列はHaskellのユニコードコードポイントのリストです。ユニコードコードポイントのリストの解釈は、システムに依存します。(これをサポートするには、古すぎないGHCも必要です)。

ただし、一般的には、ロケールが正しく設定されると、問題なく機能します。


注意:過去に警告がありました-たとえば、古いバグ:System.Directory.getDirectoryContentsユニコードサポート-これには回避策が含まれる可能性があります。

于 2012-04-17T12:30:47.647 に答える
0

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

これは既知のバグで、7.2.1 で修正されました。

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

于 2012-04-17T12:32:54.523 に答える