2013-04-01から1ヶ月間の記事一覧
タイトルは釣りです。副作用を起こしているのはHaskellから読んでいるCのライブラリです。 Win32 APIのWideCharToMultiByte、MultiByteToWideCharでUTF-16 ⇔ Shift-JIS 変換を行うには変換結果を格納するバッファを確保してそのポインタを引数に渡し、そのバ…
以前、Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って UTF-16 ⇔ Shift-JIS 変換するコードを書きましたが、コードの一部にCで記述した部分があります。本当はCを全く使わないでHaskellで書きたかったのですが問題があって出来ませんでした。…
shiftJisからUtf16、Utf16からshiftJisへの変換では、変換した後にpeekCString、peekCWString関数によってC文字列からHaskell文字列を作ります。C文字列はHaskell文字列返す前にメモリを解放しているのですが、ふとポインタで指している領域が消えると返す値…
UTF-16 ⇔ Shift-JIS の変換は計算によって行うことが出来ません。 そこで Win32 APIのMultiByteToWideChar、WideCharToMultiByteを使って変換します。 shiftJisToUtf16 Haskell 文字列をWindowsワイド文字列に変換したあとにワイド文字列からpeekCWStringでH…
Data.List に unfoldr という関数が定義されています。どういう使い道なのだろうと思ったのですが、数を2進数文字列に変換できるのではないかと思いやってみました。 Data.Listの例 --A simple use of unfoldr: unfoldr (\b -> if b == 0 then Nothing else …
IBM developerWorks:Unicodeエンコード方式 UTF-8、UTF-16、およびUTF-32間の相互運用方法を参考にUTF-32 ⇔UTF-16変換関数を作ってみました。 Windows COMの内部文字コードはUTF-16を使っています。 一方、HaskellはソースコードはUTF-8で書きますが内部では…
OverloadedStrings 言語拡張を使うとダブルクオートで囲んだ文字列を、Text、ByteString リテラルとして扱ってくれるようになります。あどけない話・Haskellライブラリ入門 (2011年版) {-# LANGUAGE OverloadedStrings #-} module Main where import qualifi…
とほほのWWW入門/ 漢字コードについて(各コード間の変換アルゴリズム)を参考にEUC-JPからShift-JISへ変換します。 ASCII このアルゴリズムは全角文字のEUC-JP ⇔Shift_JIS 変換です。ASCIIについては変化ありませんのでそのままリストに追加していきます。 半…
Data.Foldable これはData.Foldableにある例ですが、Tree型のFoldableインスタンスを定義することによってFoldableに定義されている関数を使用できるようになります。 Foldableインスタンスを定義するには、foldMap またはfoldrを定義すれば良いらしい。 imp…