Проблемы (и их решения)
SBCL - установка кодировки по умолчанию.
При работе с SBCl может возникнуть следующая проблема - при загрузке файлов (в некоторой кодировке) содержащих не стандартные знаки по отношению к кодировке используемой SBCL будет возникать ошибка:
decoding error on stream
#<SB-SYS:FD-STREAM
for "file ###"
{B291831}>
(:EXTERNAL-FORMAT ###):
the octet sequence (###) cannot be decoded.
[Condition of type SB-INT:STREAM-DECODING-ERROR]
В SBCL за кодировку используемую при загрузке файлов отвечает переменная sb-impl::*default-external-format*, по этому простейший путь решения в следующем:
- Проверить, что файлы кодируются единообразно - например, в UTF-8.
- Проверить переменную sb-impl::*default-external-format*:
CL-USER> (sb-impl::default-external-format)
:ANSI_X3.4-1968
;; что тоже самое:
CL-USER> sb-impl::*default-external-format*
:ANSI_X3.4-1968
- Установить этой переменной нужное значение:
CL-USER> (setf sb-impl::*default-external-format* :UTF-8)
:UTF-8
- Наконец, добавить эту строчку в ~/.sbclrc
P.S. использовать произвольную кодировку при открытии файла можно с помощью with-open-file:
(with-open-file (stream file-name :external-format #кодировка#)
...)