2015-04-15 3 views
3

Как указать внешний формат (например, (:crlf :|cp932|)) в ECL?Указание внешнего формата на ECL

Я хочу написать строку в файл с некоторой кодировкой. Так я печатаю в моем РЕПЛ так:

(with-open-file (out "test.txt" 
       :direction :output 
       :external-format '(:crlf :|cp932|)) 
    (write-string "some string" out)) 

Затем вызывается отладчик и показать это:

The function EXT:MAKE-ENCODING is undefined. 
    [Condition of type UNDEFINED-FUNCTION] 

Это неправильный путь ...? Когда внешний формат является :utf-8, успешно написано ...

  • ECL версия - 15.3.7
  • ОС - Ubuntu 14,04

ответ

3

основе §19.1.3. External formats в руководстве, это выглядит как соответствующий символ на самом деле называется «CP819» и находится в пакете с именем «EXT», поэтому вы должны использовать ext: cp819, а не : | cp819 |. Вы были бы в состоянии использовать (: CRLF доб: cp819), например:

(with-open-file (out "test.txt" 
       :direction :output 
       :external-format '(:crlf ext:cp932)) 
    (write-string "some string" out)) 
+0

Спасибо за ответ. Извините. Честно говоря, я прочитал руководство и попытался использовать '(: crlf ext: cp932)', но ECL возвращает «SIMPLE-ERROR» с сообщением «Не удается найти внешний символ CP932 в пакете <.» причина, почему я использую ': | cp932 |' is, он включен в возвращаемое значение функции 'ext: all-encodings' ... –

+0

@ t-sin Хм, я сам не пользователь ECL, поэтому я не было способа проверить это. Тогда этот ответ, вероятно, имеет ту же проблему? Есть ли вероятность, что 'ext: | cp932 |' (так строчный, но в пакете) есть? Или 'ext :: cp932'? И т.д? Во всяком случае, это, по-видимому, является расхождением между руководством и реализацией, поэтому вы, вероятно, должны попасть в список рассылки/отслеживания ошибок ECL/etc. –

+0

Похоже, что 'ext :: cp932' работает для меня. – BRFennPocock

0

Пожалуйста Откат к ЭСЛ 15.2.21 или использовать GIT голову - это ошибка введена в 15.3.7