Camomile 使い方メモ [OCaml]
Camomile について調べたメモ。
普通の文字列型 (string) と Camomile 内部のユニコード文字列型との間の変換を行うエンコーダ/デコーダを作る。内部エンコーディングとして UTF-8 を使う場合は以下のようにする。UTF8 以外にも UText, XString, UTF16, UCS4 が選べるようだ。
KURO-BOX% ocaml bigarray.cma camomile.cma Objective Caml version 3.10.0 # module U = CamomileLibrary.Default.Camomile.CharEncoding.Make(CamomileLibrary.UTF8);; module U : sig type text = CamomileLibrary.UTF8.t val decode : CamomileLibrary.Default.Camomile.CharEncoding.t -> string -> text val encode : CamomileLibrary.Default.Camomile.CharEncoding.t -> text -> string end
外部エンコーディングからこの UTF-8 に変換を行うには decode 関数を使う。この第1引数は変換元エンコーディングを示す型の値。これは CamomileLibrary.Default.Camomile.CharEncoding.of_name で取得できる。
# let sjis = CamomileLibrary.Default.Camomile.CharEncoding.of_name "SHIFT_JIS";; val sjis : CamomileLibrary.Default.Camomile.CharEncoding.t = <abstr>
以下は Shift_JIS の「表示」という文字列を UTF-8 に変換する。
# let hyoji_sjis = "\x95\x5c\x8e\xa6";; val hyoji_sjis : string = "\149\\\142\166" # let hyoji_utf8 = U.decode sjis hyoji_sjis;; val hyoji_utf8 : U.text = "\232\161\168\231\164\186"
この値には CamomileLibrary.UTF8 モジュールの関数を使うことができる。例えば CamomileLibrary.UTF8.length 関数を使うと正しく文字数を2文字と判断してくれる。
# CamomileLibrary.UTF8.length hyoji_utf8;; - : int = 2
ここから他の文字エンコーディングに変換するには encode 関数を使う。
# let eucjp = CamomileLibrary.Default.Camomile.CharEncoding.of_name "EUC-JP";; val eucjp : CamomileLibrary.Default.Camomile.CharEncoding.t = <abstr> # let hyoji_eucjp = U.encode eucjp hyoji_utf8;; val hyoji_eucjp : string = "\201\189\188\168"
コメント 0