nobsun #3513(2007/10/24 08:37 GMT) Rating4/4=1.00
ghcで日本語を正しく扱うには,いまのところ入出力の際に UTF8 <-> 内部コード という変換をする必要があります.この変換を行うモジュールは以前自前で書いた ことがあるのですが,今は Hackage DB に登録されています. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/utf8-string-0.2 インストール手順は以下のとおりです. $ wget http://hackage.haskell.org/packages/archive/utf8-string/0.2/utf8-string-0.2.tar.gz $ tar xf utf8-string-0.2.tar.gz $ cd utf8-string-0.2 $ runhaskell Setup.lhs configure $ runhaskell Setup.lhs build $ sudo runhaskell Setup.lhs install これで Codec.Binary.UTF8.String と System.IO.UTF8 モジュールが使えるように なります. $ ghc-pkg -l | grep utf8 とやるとこのパッケージがインストールされたかどうか確認できます. ghci には直接 UTF8 の文字列リテラルを入力できない(orz)ので,ソースコードに 定数として仕込んでおく必要があります.ソースコードのエンコーディングを UTF8 にして sample0 = "文字列(もじれつ)の反転(はんてん)" sample1 = "対応[の{とれている(さまざまな)括弧}の(例)]です。" sample2 = "これ(は(対応のとれてない)括弧がある例です。" sample3 = "これ(も{対応の)とれていない}括弧の例です。" というのをソースコード(3511.hs)にいれておきますそうしておいて, - ghci を起動. - System.IO.UTF8 を追加. - 出力用 wrapper を追加. - wrapper をつかって結果を表示 $ ghci -v0 3511.hs *Main> :m + System.IO.UTF8 *Main System.IO.UTF8> let wrapper = (System.IO.UTF8.putStrLn .) *Main System.IO.UTF8> wrapper reverseString2 sample0 (んてんは)転反の(つれじも)列字文 *Main System.IO.UTF8> wrapper reverseString2 sample1 。すで[(例)の{弧括(なまざまさ)るいてれと}の]応対 *Main System.IO.UTF8> wrapper reverseString2 sample2 。すで例るあが弧括(いなてれとの応対)は(れこ *Main System.IO.UTF8> wrapper reverseString2 sample3 。すで例の弧括}いないてれと)の応対{も(れこ ああ面倒 ^^;
[ reply ]
nobsun
#3513()
Rating4/4=1.00
ghcで日本語を正しく扱うには,いまのところ入出力の際に UTF8 <-> 内部コード という変換をする必要があります.この変換を行うモジュールは以前自前で書いた ことがあるのですが,今は Hackage DB に登録されています. http://hackage.haskell.org/cgi-bin/hackage-scripts/package/utf8-string-0.2 インストール手順は以下のとおりです. $ wget http://hackage.haskell.org/packages/archive/utf8-string/0.2/utf8-string-0.2.tar.gz $ tar xf utf8-string-0.2.tar.gz $ cd utf8-string-0.2 $ runhaskell Setup.lhs configure $ runhaskell Setup.lhs build $ sudo runhaskell Setup.lhs install これで Codec.Binary.UTF8.String と System.IO.UTF8 モジュールが使えるように なります. $ ghc-pkg -l | grep utf8 とやるとこのパッケージがインストールされたかどうか確認できます. ghci には直接 UTF8 の文字列リテラルを入力できない(orz)ので,ソースコードに 定数として仕込んでおく必要があります.ソースコードのエンコーディングを UTF8 にして sample0 = "文字列(もじれつ)の反転(はんてん)" sample1 = "対応[の{とれている(さまざまな)括弧}の(例)]です。" sample2 = "これ(は(対応のとれてない)括弧がある例です。" sample3 = "これ(も{対応の)とれていない}括弧の例です。" というのをソースコード(3511.hs)にいれておきますそうしておいて, - ghci を起動. - System.IO.UTF8 を追加. - 出力用 wrapper を追加. - wrapper をつかって結果を表示 $ ghci -v0 3511.hs *Main> :m + System.IO.UTF8 *Main System.IO.UTF8> let wrapper = (System.IO.UTF8.putStrLn .) *Main System.IO.UTF8> wrapper reverseString2 sample0 (んてんは)転反の(つれじも)列字文 *Main System.IO.UTF8> wrapper reverseString2 sample1 。すで[(例)の{弧括(なまざまさ)るいてれと}の]応対 *Main System.IO.UTF8> wrapper reverseString2 sample2 。すで例るあが弧括(いなてれとの応対)は(れこ *Main System.IO.UTF8> wrapper reverseString2 sample3 。すで例の弧括}いないてれと)の応対{も(れこ ああ面倒 ^^;