Babelは文字符号化方式(以下エンコーディング)を変換するライブラリです。他の言語で書かれたライブラリのAPIをForeign function interfaceで利用する形ではなく、すべてCommon Lispで書かれているのが特徴です。
Clozure CLのコードがベースになっているので、Clozure CLとAPIが似ています。
babel:list-character-encodingsは対応しているエンコーディングのリストを返します。
(babel:list-character-encodings) ;=> (:CP932 :EUCJP :CP1252 :CP1251 :UCS-2BE :UCS-2LE :UCS-2 :UTF-32BE :UTF-32LE ; :UTF-32 :UTF-16BE :UTF-16LE :UTF-16 :UTF-8B :UTF-8 :ISO-8859-16 :ISO-8859-15 ; :ISO-8859-14 :ISO-8859-13 :ISO-8859-11 :ISO-8859-10 :ISO-8859-9 :ISO-8859-8 ; :ISO-8859-7 :ISO-8859-6 :ISO-8859-5 :ISO-8859-4 :ISO-8859-3 :ISO-8859-2 ; :ISO-8859-1 :EBCDIC-US :ASCII)
babel:string-to-octetsは、文字列を指定したエンコーディングのバイト列に変換します。
;; UTF-8に変換 (babel:string-to-octets "日本語" :encoding :utf-8) ;=> #(230 151 165 230 156 172 232 170 158) ;; CP932に変換 (babel:string-to-octets "日本語" :encoding :cp932) ;=> #(147 250 150 123 140 234)
babel:octets-to-stringは、指定したエンコーディングのバイト列を文字列に変換します。バイト列の型が(unsigned-byte 8)のベクタでないといけないことに注意してください。
;; UTF-8から変換 (let ((vector (make-array 9 :initial-contents '(230 151 165 230 156 172 232 170 158) :element-type '(unsigned-byte 8)))) (babel:octets-to-string vector :encoding :utf-8)) ;=> "日本語" ;; CP932から変換 (let ((vector (make-array 6 :initial-contents '(147 250 150 123 140 234) :element-type '(unsigned-byte 8)))) (babel:octets-to-string vector :encoding :cp932)) ;=> "日本語"