#:g1: trivial-utf-8の紹介

Posted 2014-02-14 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の46日目です。

trivial-utf-8とはなにか

 trivial-utf-8とは、UTF-8を扱う為のちょっとしたライブラリです。

パッケージ情報

パッケージ名trivial-utf-8
Quicklisp
プロジェクトページTrivial UTF-8
CLiKihttp://cliki.net/trivial-utf-8
Quickdocshttp://quickdocs.org/trivial-utf-8

インストール方法

(ql:quickload :trivial-utf-8)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 ドキュメントによれば、trivial-utf-8は、babelが登場する前に作られたものということで、新規のプロジェクトで利用するならbabelの方が良いかもね、というようなことが書いてあります。
提供される関数群も大体はbabelがサポートしているところではあります。
提供されている関数等は下記の通りです。

utf-8-group-size

 一文字が何オクテットで構成されているかを調べるもの

(let ((u8v (trivial-utf-8:string-to-utf-8-bytes "喧喧諤諤"))
      (pos 0)) 
  (mapcar #'trivial-utf-8:utf-8-bytes-to-string 
          (list 
           (subseq u8v pos (incf pos (trivial-utf-8:utf-8-group-size (elt u8v 0))))
           (subseq u8v pos (incf pos (trivial-utf-8:utf-8-group-size (elt u8v 0))))
           (subseq u8v pos (incf pos (trivial-utf-8:utf-8-group-size (elt u8v 0))))
           (subseq u8v pos (incf pos (trivial-utf-8:utf-8-group-size (elt u8v 0)))))))
;=>  ("喧" "喧" "諤" "諤")

utf-8-decoding-error

 デコーディング時エラーのコンディション

read-utf-8-string

 オクテットのストリームからutf-8の文字を読み取る

(trivial-utf-8:read-utf-8-string
 (*:make-byte-array-input-stream (*:string-to-octets "喧喧諤諤"))
 :stop-at-eof :yes)
;=>  "喧喧諤諤"

utf-8-bytes-to-string

 オクテットを文字列にする

(trivial-utf-8:utf-8-bytes-to-string (*:string-to-octets "喧喧諤諤"))
;=>  "喧喧諤諤"

write-utf-8-bytes

 UTF-8の文字列をオクテットのストリームに出力する

(with-open-stream (out (*:make-byte-array-output-stream))
  (trivial-utf-8:write-utf-8-bytes "喧喧諤諤" out)
  (trivial-utf-8:utf-8-bytes-to-string (*:get-output-stream-data out)))
;=>  "喧喧諤諤"

utf-8-byte-length

 UTF-8の文字列のオクテットでの長さ

(trivial-utf-8:utf-8-byte-length "喧喧諤諤")
;=>  12

string-to-utf-8-bytes

 文字列をオクテットにする

(trivial-utf-8:string-to-utf-8-bytes "喧喧諤諤")
;=>  #(229 150 167 229 150 167 232 171 164 232 171 164)

trivial-utf-8の紹介/関連記事等

まとめ

 今回は、trivial-utf-8を紹介してみました。
babelがカバーしているとはいえ、低レベルな関数はそれなりに使えるところはあるかもしれないですね。

comments powered by Disqus