- 日本語を含んだHaskellのソースコードは UTF8 で記述しますがコンパイルされた文字列はHaskellの内部コード UCS4 に変換されます。
- Windows システムとの文字列のやり取りは UCS4 から SJIS に変換して書き込み、受信した文字列はSJISからUCS4に変換します。
- BSTRの文字コードはUTF16です。日本語を使う分にはUCS4と同じですがフォーマットを変換する必要があるのでAPIを呼んでBSTRに変換します。
import System.Time (getClockTime) import Cinnamon.Ucs (ucs4ToSjis, sjisToUcs4, ucs4ToUtf8, utf8ToUcs4) doCommand :: (Selection y, Selection m, Textual l, Paint l) => y -> m -> l -> IO () doCommand yearInObj monthInObj log = do cOleInitialize 0 -- ソースコードは UTF8 ですがコンパイルするとUCS4なので、 -- UCS4からSjisに変換して Excel ファイルを開きます。 cFullName <- getFullPathName (ucs4ToSjis "日本語ファイル名.xls") exl <- excelOpen cFullName -- Windows から取得した文字列は SjisなのでUcs4に変換して wxHakell で表示。 ctime <- getClockTime writeText log $ sjisToUcs4 (show ctime ++ "\n") -- UTF8 で記述された日本語はコンパイルすると UCS4なのでそのまま wxHakell に表示。 writeText log "【シートタイトル】\n" ctime <- getClockTime writeText log ((sjisToUcs4 (show ctime)) ++ "\n●終了しました\n") cOleUninitialize
GHC 6.12.1で改善されたようなのでもっと使いやすくなっていると思います・・・調べてみます。
- Cinnamon.Ucs をインポートするには cinnamon-0.2 をインストールする必要があります。
- cinnamon-0.2は ha-tan が開発したHaskellからNKFを使うためのライブラリです。
- Windows 開発環境構築(3) Cinnamon.Nkf が動いた
- Windows 開発環境構築(2):cinnamon-0.2 インストールメモ