Lisp で文字コード変換
ClozureCL で文字コードを変換する方法を調べてみた。そもそも、言語としてのデフォルトのエンコーディングは ccl:*default-external-format* で決まっているようだ。そして、何らかの文字操作というか、ストリームからの読み込み、ストリームへの書き込みの際には、このエンコーディングが使用される・・・らしい。
独自のエンコーディングを使用したい場合は、make-external-format を使い、
- エンコーディングの有効範囲(domain)
- 使用する文字コード(character-encoding)
- 改行コード(line-termination)
- 独自エンコーディングの説明(external-format)
を組み合わせて作成する。こんな感じだろうか。
? (setf *EUC-JP* (make-external-format :character-encoding :EUC-JP)) #<EXTERNAL-FORMAT :EUC-JP/:UNIX #x302000F962AD> ? (setf aaa (encode-string-to-octets "aaa")) #(97 97 97) ? (decode-string-from-octets aaa :external-format *EUC-JP*) "aaa" 3 ?
ASCII 文字だと効果がよくわからないかも。