带有中文文件名的Prelude.writeFile

时间:2012-04-17 12:22:13

标签: haskell unicode cjk writefile

我正在测试一些喜欢将内容输出到文件的内容,该文件具有中文名称。

使用正确的内容但不是文件名成功创建文件。

我看一下函数writeFile ^1,它使用String表示文件名。 所以我怀疑这可能是根本原因。

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

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

    write2File :: IO ()
    write2File = writeFile file content

谢谢你的帮助!

-Simon

---------------------更新了

  1. 我身边的GHC是7.0.2
  2. 升级前找到的解决方法。请参阅下面的详细信息和代码更改

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

2 个答案:

答案 0 :(得分:3)

String是Haskell中的unicode代码点列表。该unicode代码点列表的解释取决于系统。 (你还需要一个不太旧的GHC来支持这个)。

一般情况下,一旦你的语言环境设置正确,一切正常。


N.B。过去一直有警告 - 例如旧的错误:System.Directory.getDirectoryContents unicode support - 可能涉及变通方法。

答案 1 :(得分:0)

与此同时,您可以使用System.Posix.IO.ByteString模块。这将允许您将文件路径指定为字节字符串,因此您可以自己进行编码/解码。

这是一个已知错误,已在7.2.1中修复。

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