Shammer's Philosophy

My private adversaria

Lisp で文字コード変換

ClozureCL で文字コードを変換する方法を調べてみた。そもそも、言語としてのデフォルトのエンコーディングは ccl:*default-external-format* で決まっているようだ。そして、何らかの文字操作というか、ストリームからの読み込み、ストリームへの書き込みの際には、このエンコーディングが使用される・・・らしい。

 Clozure CL Documentation

独自のエンコーディングを使用したい場合は、make-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 文字だと効果がよくわからないかも。