Как открыть файл, имя которого содержит код Unicode в Lisp (sbcl+slime)?

(with-open-file (s "~/例子.txt"
                 :external-format :utf-8)
  (print s))

результат:

NIL c-string encoding error:
  the character with code 20363 cannot be encoded.
  [Condition of type SB-INT:C-STRING-ENCODING-ERROR]

Пример:

в Aquamacs 3.5 с новейшей слизью и sbcl2.0.2: в Aquamacs3.5 со слизью и sbcl

sbcl в iterm2 может это сделать:

в iterm2

Сам Aquamacs тоже умеет правильно открывать и записывать имя файла, содержащее utf-8.

я пытался добавить

(setq slime-net-coding-system 'utf-8-unix)
(set-language-environment "UTF-8")

в моем конфигурационном файле aquamacs, но он не работает. Пожалуйста помоги!

Обновление: я наконец нашел причину. В Iterm2 команда

locale

дает этот вывод: введите здесь описание изображения

В то время как в Aquamacs открывается из пользовательского интерфейса, в eshell это дает:

Результат из электронной оболочки

После того, как я добавил:

(setenv "LANG" "en_US.UTF-8")

к моей конфигурации Aquamacs, это работает! Спасибо всем, кто ответит на мой вопрос! Ниже приведены ссылки, которые мне помогают.

В чем именно заключается вопрос

Решения вопроса

Как установить локаль для открытия Emacs из пользовательского интерфейса


person C-Entropy    schedule 10.03.2020    source источник
comment
Операционная система?   -  person Rainer Joswig    schedule 10.03.2020
comment
Я не могу воспроизвести это, это отлично работает в Linux x86_64, у вас есть :sb-unicode в списке *features*?   -  person coredump    schedule 10.03.2020
comment
Я использую sbcl 2.0.2+ slime + aquamcs в Mac10.15.3.   -  person C-Entropy    schedule 11.03.2020
comment
Я новичок в Common Lisp, подскажите, пожалуйста, как включить :sb-unicode в списке features?   -  person C-Entropy    schedule 11.03.2020
comment
Попробуйте использовать терминал с поддержкой Unicode. Если проблема не устранена, лучше всего спросить в списке рассылки SBCL (или аналогичном), как использовать пути в Unicode в macOS и поддерживаются ли они вообще в SBCL в macOS.   -  person Rainer Joswig    schedule 11.03.2020
comment
список функций описан здесь: clhs.lisp.se/Body/v_featur.htm , в основном он информирует вас о некоторых свойствах вашей среды CL, а когда речь идет о поддержке юникода или нет (по крайней мере, с SBCL), это зависит от того, как он был скомпилирован, насколько я знаю. Ваша среда, похоже, поддерживает юникод, основываясь на том, что показано в iterm2; вы можете проверить, присутствует ли эта функция, просто введя имена переменных в интерпретаторе (вокруг функций есть звездочки, но StackOverflow понимает это как курсив). Вы перезагрузили аквамакс после того, как изменили файл конфигурации?   -  person coredump    schedule 11.03.2020
comment
Да, у меня есть релоа   -  person C-Entropy    schedule 11.03.2020
comment
Вы можете добавить его в качестве ответа.   -  person Rainer Joswig    schedule 11.03.2020


Ответы (1)


Добавьте что-то вроде:

(setenv "LANG" "en_US.UTF-8")

к вашей конфигурации emacs. Объяснение выше.

person C-Entropy    schedule 13.03.2020