SSブログ

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"

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。