#:g1: asdf-encodingsの紹介

Posted 2014-05-07 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の128日目です。

asdf-encodingsとはなにか

 asdf-encodingsは、Francois-Rene Rideau(fare)氏作のASDFで複数のエンコーディングのファイルを扱うためのユーティリティです。

パッケージ情報

パッケージ名asdf-encodings
Quicklisp
Quickdocshttp://quickdocs.org/asdf-encodings

インストール方法

(ql:quickload :asdf-encodings)

試してみる

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

 utf-8、euc-jp、sjisの3種のエンコーディングを扱うとします。
asdf-encodingsでは自動検出もしてくれるようなのですが、上記のうちutf-8以外は転けるようなのでEmacsでいうアトリビュートリストで指定します。

utf-8.lisp
;;; -*- coding: utf-8 -*-

(defun utf-8 () "UTF-8でござる")

;;; *EOF*

euc.lisp
;;; -*- coding: euc-jp -*-

(defun euc () "EUCでござる")

;;; *EOF*

sjis.lisp
;;; -*- coding: sjis -*-

(defun sjis () "SJISでござる")

;;; *EOF*

このようなファイルの場合、

(defsystem :asdf-enc-test
  :serial t
  :defsystem-depends-on (:asdf-encodings)
  :depends-on (:fiveam)
  :components ((:file "package")
               (:file "utf-8")
               #-allegro (:file "sjis")
               (:file "euc")
               (:file "test")))

のような感じでsystemを記述すれば、3種類のエンコーディングでも処理できるようです。
アトリビュートリストでエンコーディングを指定することには、若干の落とし穴があり、エディタがcoding:を解釈する場合、エディタ対応している記述でありつつ処理系が解釈できる記述である必要があります。
実際Allegro CLではsjisという記述の解釈ができないのでエラーとなります。この辺りは今後改善されていくのでしょう〈多分日本人によって〉。

まとめ

 今回は、asdf-encodingsを紹介してみました。
最近は、UTF-8に一本化されている傾向はありますが、エンコーディングを指定して読み込めると便利ですね。

comments powered by Disqus