gusmachine,haskellで多バイト文字列を扱ってはまり、haskelliansに助けられるのこと。
- gusmachine
- 2875
- 0
- 3
- 0
haskell fastcgi + lighttpdを試してみている。utf-8の文章をreadFile してそれを output すると非ASCII文字列がutf-16の下8ビットだけで出るのはどこが悪いんだろう。
2011-03-12 22:57:42output "おはよーおはよー" が Jo[88][FC]Jo[88][FC] になるな。fastcgi moduleかあるいはlighttpdかどちらかが悪いな。
2011-03-12 23:00:51@gusmachine HaskellのCharはUnicodeだけどそれを想定していない箇所があるということでしょう。昔はGHCのputStrLnなんかもソレで、CharをCのcharにキャストしたりしてた。今は知りませんが。
2011-03-12 23:00:43@jmuk putStrLnベースのテキストツールをcgi化しようとしているところなのでputStrLnは今は大丈夫のはずです。fastcgiモジュールを調べてみます。
2011-03-12 23:03:11@gusmachine はい。readFileが出来ているということは普通のコアシステムはUTF-8で万全て意味だと思います。個人的な感覚ではlighttpdよりfastcgiの方がくさいです。
2011-03-12 23:06:05ところで ghciで "おはよーおはよー" が "\12362\12399\12424\12540\12362\12399\12424\12540"と出力されるのは想定外だった。(putStrじゃなくてshow). バックスラッシュの後は10進。
2011-03-12 23:10:33@gusmachine ところでStringで頑張るよりData.ByteStringを使った方が楽じゃない? まあ何をしたいかによるけど: http://bit.ly/eQ05nT
2011-03-12 23:42:10haskell bytestringで utf-8の "こんにちは、世界" を用意する方法がわからない... Stringはunicode化しちゃうし.
2011-03-13 07:15:13@gusmachine Data.ByteString.Char8のpack/unpackが使えたような記憶があるんですが、違いました?
2011-03-13 09:38:29@jmuk @gusmachine ていうかByteStringにもFIleIOがあるので、そちらを使ってStringは使わないのが勝ちパターンな希ガス。ライブラリの都合でうまくいかないのだとすると残念な話ですが。
2011-03-13 09:41:08@jmuk はじめにテストとして utf-8のByteString literalをつくろうとして失敗しただけです。packだとChar /= Word8で無理。ByteString.readFileで目的は果たせましたが。
2011-03-13 10:08:03http://j.mp/g34Gmj > The output is assumed to be text/html, encoded using ISO-8859-1. なるほど
2011-03-13 07:21:56setHeader encoding=utf-8と Stringではうまくいかなかった。 outputFPSを試してダメならfastcgiはジャンクだな.
2011-03-13 07:26:46@gusmachine @jmuk いまは text package をおすすめします : http://hackage.haskell.org/package/text : Efficient UTF-8 Encoding http://bit.ly/ff3yAM
2011-03-13 10:15:46@gusmachine UTF-8 でこんにちは、 Data.Text.IO : http://hackage.haskell.org/packages/archive/text/0.11.0.5/doc/html/Data-Text-IO.html#v:readFile
2011-03-13 10:20:01@ikegami__ Network.CGI.outputFPSに流すには encodeUtf8すればよさそうですね。 http://hackage.haskell.org/packages/archive/cgi/latest/doc/html/Network-CGI.html
2011-03-13 10:24:43StringをTextに全体的に書き換えるのはかなりめんどうだな。あるいは自分のコードがその書き換えに耐性が有るように書かれていないだけなのか。ちなみに新しいコードは(Monoid s, IsString s) を使って書いてみている。
2011-03-13 15:32:28だめだ。isPrefixOf とか fromString とかいちいち書くのが面倒すぎる。あるいは自前型クラスを書くのが正解かもしれないけど気が進まない。 「この程度の実装にわざわざ自前型クラス作ってるの(顔」という未来の自分の声が聞こえる。
2011-03-13 15:46:07