Prelude.writeFile with a Chinese file name
質問
I'm testing something that like to output content to file, which has a Chinese name.
The file would be created successfully with right content but not file name.
I take a look at the function writeFile
^1 and it represents file name using String
.
So I suspect this might be root cause.
file :: FilePath
file = "上海万达影城.html"
content :: String
content = "<h1>hello</h1>"
write2File :: IO ()
write2File = writeFile file content
Thanks your help!
-Simon
--------------------- Updated
- GHC at my side is 7.0.2
A workaround found before upgrade. see detail below and the code change like
import qualified Codec.Binary.UTF8.String as UTF8 file = UTF8.encodeString "上海万达影城.html"
解決
String is a list of unicode code points in Haskell. The interpretation of that list of unicode code points is system dependent. (You also need a not too old GHC to support this).
Generally though, once you're locale is set correctly, things just work.
N.B. there have been caveats in the past -- e.g. the old bug: System.Directory.getDirectoryContents unicode support - which might involve workarounds.
他のヒント
In the meantime, you can use the System.Posix.IO.ByteString
module. This will let you specify file paths as byte strings, so you can do the encoding/decoding yourself.
This is a known bug, and was fixed in 7.2.1.