【问题标题】:Character cannot be represented in character set in CLISP (2.49)字符不能在 CLISP (2.49) 中的字符集中表示
【发布时间】:2014-11-05 03:56:30
【问题描述】:
我正在尝试在 Windows 上使用 CLISP。所以,当我在命令行中启动它时,我会看到下一个
*** - SYSTEM::DRIVER: Character #\u0414 cannot be represented in the character set CHARSET:cp437
Break 1 [3]>
我该如何解决这个问题?
【问题讨论】:
标签:
windows
encoding
lisp
common-lisp
clisp
【解决方案1】:
这些错误信息是什么意思:“CHARSET:ASCII 转换中的无效字节#x94”和“字符#\u00B3 不能在字符集CHARSET:ASCII 中表示”?
这意味着您正在尝试从(或向)具有 ASCII :EXTERNAL-FORMAT 的字符流读取(“无效字节”)或写入(“无法表示字符”)非 ASCII 字符。默认值在-Edomain encoding 中描述。
这也可能是由文件系统访问引起的。如果您的文件名称与您的CUSTOM:*PATHNAME-ENCODING* 不兼容,则文件系统访问(例如DIRECTORY)将SIGNAL 这个ERROR。您需要设置CUSTOM:*PATHNAME-ENCODING* 或将-Edomain encoding 传递给CLISP。使用“1:1”编码,例如CHARSET:ISO-8859-1,应该可以帮助您避免这个错误。
请注意,此错误可能由 read-eval-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)
CLISP 只会打印 NIL 并在您键入 l 时发出错误信号。
【解决方案2】:
cp437 似乎表示代码页。如果我没记错的话,代码页 437 是“US-ASCII”,只有 7 位。看来您需要配置“命令行”以显示 unicode。