字符不能用CLISP中的字符集表示(2.49)

时间:2014-11-05 03:56:30

标签: windows encoding lisp common-lisp clisp

我试图在Windows上使用CLISP。所以,当我在命令行中启动时,我会看到下一个

*** - SYSTEM::DRIVER: Character #\u0414 cannot be represented in the character set CHARSET:cp437
Break 1 [3]>

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

This is an FAQ

这些错误消息的含义是什么:“CHARSET中的无效字节#x94:ASCII转换”和“字符#\ u00B3无法在字符集CHARSET:ASCII中表示”?

这意味着您尝试从(或)具有ASCII :EXTERNAL-FORMAT的字符流中读取(“无效字节”)或写入(“字符无法表示”)非ASCII字符。默认值在-Edomain encoding

中描述

这也可能是由文件系统访问引起的。如果您的文件名称与CUSTOM:*PATHNAME-ENCODING*不兼容,则文件系统访问权限(例如DIRECTORY)将SIGNALERROR。您需要设置CUSTOM:*PATHNAME-ENCODING*或将-Edomain encoding传递给CLISP。使用“1:1”编码(例如CHARSET:ISO-8859-1)可以帮助您避免此错误。

请注意,此错误可能由read-eval-print循环的“Print”部分发出信号,而不是由您调用的函数发出信号。例如,如果文件" foo"包含非ASCII字符,当您键入

时,您会看到这样的错误
(WITH-OPEN-FILE (s "foo"
                 :direction :input
                 :EXTERNAL-FORMAT CHARSET:ISO-8859-1)
  (READ-LINE s))

如果您输入

(WITH-OPEN-FILE (s "foo"
                 :direction :input
                 :EXTERNAL-FORMAT CHARSET:ISO-8859-1)
  (SETQ l (READ-LINE s))
  NIL)

当您键入l时,C​​LISP将只打印NIL并发出错误信号。

答案 1 :(得分:1)

cp437似乎表示代码页。代码页437是" US-ASCII"如果我没记错的话,那只是7位。您似乎需要配置"命令行"显示unicode。