2008年6月25日水曜日

Haskell で日本語表示 - utf8-string を利用して

ghcで日本語を正しく扱うには,いまのところ入出力の際に UTF8 <-> 内部コードという変換をする必要があります.…,今は Hackage DB に登録されています.(...)

(どう書く?org 3513 nobsun: ghcで日本語を正しく扱うには,いまのと...(文字列の反転(括弧の対応を保存)) - 投稿の詳細 より )

 

utf8-string パッケージをインストール

以下、上記のサイトの説明に沿ってインストールを行なった。 (GHC 6.8.3, Windows XP)

HackageDB: utf8-string-0.3.1 にアクセスし、Downloads より utf8-string-0.3.1.tar.gz をダウンロードし、解凍。

コマンドラインより、utf8-string-0.3.1 ディレクトリで以下を実行。

runhaskell Setup.lhs configure
runhaskell Setup.lhs build
runhaskell Setup.lhs install

ghc-pkg list でインストールされたパッケージを確認することができる。(cf. 5.8.1. Using Packages)

追記 (2011.4.23) : コマンドプロンプトから cabal でインストールするには、

cabal install utf8-string

 

試してみる

ソースコードは UTF8 にする。読み込むファイルがある場合は、それも UTF8 に。

追記(2009.4.25) : 改行コードは LF 。Meadow なら C-x RET f で utf-8-unix に。

例えば、 文字列の先頭から 3 文字取って返す場合、

import System.IO.UTF8

main = System.IO.UTF8.putStrLn $ take 3 "ほげpiyo"

上記を test.hs と名前を付けて保存。コマンドラインより、

runghc test.hs > result.txt

結果は result.txt に書き込まれる。 (コマンドラインで chcp 65001 とし、UTF-8 が表示されるようにしたが、コマンドラインに出力させるとエラーが表示された。)

 

ファイルから読み込む場合

今度は、ファイルから読み込んで、3 行分出力するスクリプト。

import qualified System.IO.UTF8 as U

main = do cs <- U.getContents
          U.putStrLn $ unlines $ take 3 $ lines cs

(参考: そんな悲しい目をしないで » Blog Archive » Haskell で日本語(マルチバイト文字)を使う方法 )

上記を test2.hs と名前をつけて保存。読み込む対象のファイル名は data.txt 。コマンドラインから、

runghc test2.hs < data.txt > result.txt

result.txt に結果が表示される。

 

ドキュメント

上記 HackageDB: utf8-string-0.3 によると、

Exposed modules
Codec.Binary.UTF8.String, System.IO.UTF8, Data.ByteString.UTF8

それぞれ利用できる関数が記載されている。


関連記事