【问题标题】:How do I get quicklisp to load rfc2388 in slime?如何让 quicklisp 在 slime 中加载 rfc2388?
【发布时间】:2023-03-31 09:15:01
【问题描述】:

我正在尝试通过quicklispslime 中加载hunchentoot,并收到以下错误:

READ error during COMPILE-FILE:

  :ASCII stream decoding error on
  #<SB-SYS:FD-STREAM
    for "file [redacted]/dists/quicklisp/software/rfc2388-20120107-http/rfc2388.asd"
    {100607B723}>:

    the octet sequence #(196) cannot be decoded.

  (in form starting at line: 29, column: 29,
  file-position: 1615)
[Condition of type ASDF:LOAD-SYSTEM-DEFINITION-ERROR]

我在尝试运行时得到这个:

(ql:quickload "hunchentoot")

或者简单地说:

(ql:quickload "rfc2388")

好像其他人也是gettingthis。我在一个可能的答案中找到了一个hint,说:

The system file is encoded as UTF-8. 
I'm not sure how to configure things so that SBCL on Windows starts with 
UTF-8 as its default encoding for loading sources, but that's what you 
need to do. 

从那里,我尝试过(基于例如 [this] 将以下内容添加到我的 emacs 配置中:

(set-language-environment "UTF-8")
(setq slime-lisp-implementations
      '((sbcl ("/opt/local/bin/sbcl") :coding-system utf-8-unix)))
(setq slime-net-coding-system 'utf-8-unix)

但是...即使在完全重新启动 emacs 之后,我仍然遇到同样的错误,以确保我有一个新的 Slime 正在读取上述配置。

那么,我错过了什么,和/或我怎样才能加载它?

提前致谢! (更感谢您的成功回答。;)

【问题讨论】:

  • 试试这个:(setq slime-net-coding-system 'utf-8-unix)
  • @VsevolodDyomkin:你会注意到我已经尝试过了(见最后一段文本的最后一行)......我需要做些什么来让 sbcl 自己看到这个吗?该变量似乎(如果我正确阅读文档)控制网络连接(我认为是 swank?),但是什么控制 SBCL 的启动?

标签: utf-8 common-lisp slime sbcl quicklisp


【解决方案1】:

您是否检查过您的区域设置? Emacs 配置只告诉它为 SLIME 和 SWANK 之间的通信设置什么编码系统。

您可以使用 /usr/bin/locale 检查区域设置,例如:

navi ~ » locale
LANG=pl_PL.UTF-8
LC_CTYPE=pl_PL.UTF-8
LC_NUMERIC=pl_PL.UTF-8
LC_TIME=pl_PL.UTF-8
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY=pl_PL.UTF-8
LC_MESSAGES=C
LC_PAPER=pl_PL.UTF-8
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT=pl_PL.UTF-8
LC_IDENTIFICATION=pl_PL.UTF-8
LC_ALL=
navi ~ »

如您所见,我的所有地方都设置为 UTF-8,除了显示“C”消息。

【讨论】:

  • (setenv "LANG" "en_US.UTF-8") 添加到我的emacs init 文件中(并重新启动,作为重新启动slime/sbcl 的一种懒惰方式)确实解决了问题。谢谢! (这个答案并没有完全给出,但它为我指明了我需要的方向,这是值得赞赏的。)
【解决方案2】:

试试这个:

进入 .../quicklisp/dists/quicklisp/software/rfc2388* 目录并将 rfc2388.asd 加载到文本编辑器中。 向下移动到 defsystem 表单的 :author 参数。用文件顶部给出的名称替换作者的姓名。 使用 ASCII 编码存储文件。

当然,当库的新版本发布时,解决方法就会丢失。或者将修改后的项目存储在本地项目中。

【讨论】:

  • 我很高兴找到一个不需要我更改某人姓名的表示,也不需要管理补丁的解决方案。我敢肯定这会奏效,但设置 LANG 让我觉得(大多数情况下,至少)更快乐的解决方案。我认为我只是假设 LANG=C 的日子可能即将结束。 :)
【解决方案3】:

在原始 UTF-8 编码仍然有效的情况下,调试器应该提供一个 INPUT-REPLACEMENT 选项,以用替换字符串替换有问题的输入字符。选择该选项,键入“?”或“x”或您喜欢的任何字符串,然后按 ENTER。然后加载完成。当然,这不是你每次都想做的事情。

所以最好的办法可能是给作者发一封电子邮件,要求提供一个用于 quicklisp 的 ascii 版本。

【讨论】:

  • 嗯,我不记得在调试器中看到过那个选项......我可以使用的重新启动是:0: [ABORT] Abort loading file "[...]/rfc2388.asd". 1: [REINITIALIZE-SOURCE-REGISTRY-AND-RETRY] Retry finding system rfc2388 after reinitializing the source-registry. 2: [ABORT] Give up on "rfc2388" 3: [RETRY] Retry SLIME REPL evaluation request. 4: [*ABORT] Return to SLIME's top level. 5: [ABORT] Abort thread (#&lt;THREAD "repl-thread" RUNNING {10049C8083}&gt;) - 你希望在那里看到什么?
【解决方案4】:

您的 HOME 中应该有一个 .cache 目录,其中包含所有 fasl 文件。有时,当编译出现问题时,删除那些旧的 fasl 文件似乎对我有用。

【讨论】:

  • 我将它们重命名了,但似乎并没有什么不同。我很确定有某种设置可以使编码系统正确,这是必需的,这只是已编译内容的缓存——不过,我无法编译该文件。我可以想象以前编译的东西可能会干扰,但是......它似乎没有改变任何东西。
猜你喜欢
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多