ubuntu9.10上のhaskell(ghc)でUTF8を扱うには
追記 2010/08/20 13:21:22:
ubuntu10.04以降ではhaskellのバージョンが上がって以下の問題は起きないらしい。
http://www.sampou.org/cgi-bin/w3ml.cgi/haskell-jp/msg/480
追記ここまで
そこで色んな対処方があるのですが、utf8-string という素敵なパッケージがありますので、これを使います。
ここで情報を得たのでubuntuには標準パッケージとしてutf8-stringが用意されていた
$ sudo aptitude install libghc6-utf8-string-dev
使い方
import qualified System.IO.UTF8 main=System.IO.UTF8.putStrLn "こんにちわ世界"
とか
import qualified System.IO.UTF8 as U main=U.putStrLn "こんにちわ世界"
注意すべき点は System.IO.UTF8.printでは化けてしまうこと
Prelude> :m System.IO.UTF8 Prelude System.IO.UTF8> System.IO.UTF8.print "こんにちわ世界" Loading package bytestring-0.9.1.4 ... linking ... done. Loading package utf8-string-0.3.5 ... linking ... done. "\12371\12435\12395\12385\12431\19990\30028"
せっかくprint使う癖がついたのに…
もうちょっと先に行ってみる。標準入力とソースコードのUTF8文字列の扱いは
main=do putStrLn "hello world" s <- getLine putStrLn $ "こんにちわ"++s++"世界"
これを実行すると
hello world こんにちわ S\223ka\217こんにちわ^VL
うーん、やっぱりソースの方が化けるよな。
import System.IO.UTF8 puts = System.IO.UTF8.putStrLn gets = System.IO.UTF8.getLine main=do puts "hello world" s <- gets puts $ "こんにちわ"++s++"世界"
内部エンコードがUTF8になったときには puts=puStrLnって定義入れればいいだけだとおもう