SBCLでのエンコーディング


ところでLispはUnicodeに対してよくサポートされていますが、今日奇妙な問題を発見しました.sbclのreplを通じてredisに格納されたデータは、UTF-8ではなく、完全に間違っています.
下入力と出力を以下のようにチェックしました
(stream-external-format *standard-output*)
(stream-external-format *standard-input*)
sb-impl::*default-external-format*

結果はなんと(:ASCII:REPLACEMENT?)、これは面倒です.直接次のコードを発見して、とても暴力的で、しかしsbclに対してだけ有効で、cclの中でどのように処理するべきか分かりません(時間を探して資料を調べてテストしましょう).
(defun set-default-external-format (external-format)
  (assert (sb-impl::find-external-format external-format))
  (setf sb-impl::*default-external-format* external-format)
  (with-output-to-string (*error-output*)
    (setf sb-sys:*stdin*
          (sb-sys:make-fd-stream 0 :name "standard input" :input t :buffering :line))
    (setf sb-sys:*stdout*
          (sb-sys:make-fd-stream 1 :name "standard output" :output t :buffering :line))
    (setf sb-sys:*stderr*
          (sb-sys:make-fd-stream 2 :name "standard error" :output t :buffering :line))
    (setf sb-sys:*tty* 
        (make-two-way-stream sb-sys:*stdin* sb-sys:*stdout*)) 
    (princ (get-output-stream-string *error-output*) sb-sys:*stderr*)))