ghc7.0.4で、バイト文字列を日本語ファイル名で保存する方法
環境はmac、ghc7.0.4
yesodアプリケーションで、アップロードされた画像ファイルをローカルに保存するときに、日本語ファイル名だと文字化けしてしまう問題が発生した。
どうやらghc7.0.4は日本語ファイル名に対応していないっぽい。
Haskell-jaに質問を投げてアドバイスをもらった結果、ファイル名をCodec.Binary.UTF8.String. encodeStringでenncodeしてあげるとうまくいった!
import Data.ByteString as B import Codec.Binary.UTF8.String as S main :: IO () main = do body <- B.readFile "hoge.jpg" B.writeFile (S.encodeString "ほげ.jpg") body
もしバイト文字じゃなくただの文字列の場合は、System.IO.UTF8のwriteFileで日本語ファイル名が保存できる。
ghc7.4からは日本語ファイル名対応するらしいので、はやく付属のHaskell Platformがでてほしいところ。