SBCLでのエンコーディング
ところでLispはUnicodeに対してよくサポートされていますが、今日奇妙な問題を発見しました.sbclのreplを通じてredisに格納されたデータは、UTF-8ではなく、完全に間違っています.
下入力と出力を以下のようにチェックしました
結果はなんと(:ASCII:REPLACEMENT?)、これは面倒です.直接次のコードを発見して、とても暴力的で、しかしsbclに対してだけ有効で、cclの中でどのように処理するべきか分かりません(時間を探して資料を調べてテストしましょう).
下入力と出力を以下のようにチェックしました
(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*)))