clozure common lisp中的读取错误

clozure common lisp中的读取错误,lisp,runtime-error,common-lisp,ccl,Lisp,Runtime Error,Common Lisp,Ccl,有一个包含外语字符的s表达式文件,我正在阅读该文件,如下所示: (defun test (file) (with-open-file (stream file) (loop while (read stream nil nil)))) 它在ccl 1.8中读取文件时没有错误,但在1.9中抛出错误: ? (test "/users/markklein/desktop/naples.text") > Error: Reader error: Illegal symbol synt

有一个包含外语字符的s表达式文件,我正在阅读该文件,如下所示:

(defun test (file)
  (with-open-file (stream file)
    (loop while (read stream nil nil))))
它在ccl 1.8中读取文件时没有错误,但在1.9中抛出错误:

? (test "/users/markklein/desktop/naples.text")
> Error: Reader error: Illegal symbol syntax.
> While executing: CCL::%PARSE-TOKEN, in process Listener(5).
> Type cmd-. to abort, cmd-\ for a list of available restarts.
> Type :? for other options.
1 > 

有人知道哪里出了问题,以及如何解决吗?我可以根据请求发送数据文件。

Ben Hyde在《Clozure邮件列表》中指出,Clozure CL的默认外部格式已更改为
:utf-8
。因此,他提出了这一备选方案:

在1.9版本中,我们将默认的外部格式更改为:utf-8。 这可能会把你绊倒。 尝试显式指定适当的外部格式,例如

(defun test (file)
  (with-open-file (stream file :external-format :iso-8859-1)
    (loop while (read stream nil nil))))

“我可以根据要求发送数据文件。”请将其包含在问题中。但是把问题缩小到引起问题的文本。例如,将文件剪下一半;如果问题仍然存在,那么它就在剩下的一半,否则就把另一半放回去,取出另一半。您应该能够将其归结为有问题的s表达式。重要的是,你要提供一个完整的例子,这意味着足够让我们重现问题,以及一个最小的例子,这意味着有尽可能少的“额外的”,因为它只是在路上。另外,通常情况下,尝试创建一个最小的完整例子的过程足以告诉你问题在哪里@BenHyde,我认为它应该以某种方式作为答案发布。通常,当您在
文件流上出现
读取器错误时,
文件位置
将是可恢复的信息。我会尝试
:?
选项,看看是否有什么事情看起来很有希望。如果您获得了
文件位置
,则可以在您喜爱的编辑器中打开文件并跳转到该角色。如果失败,我将通过在
print
调用中包装
read
调用来定位失败的s-exp。