Регистрация | Войти
Lisp — программируемый язык программирования

Проблемы (и их решения)

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 #кодировка#)
  ...
)

@2009-2013 lisper.ru