用 load 加载含中文的代码只需附带参数 :external-format :utf-8 就能够成功了 shell
假如你的 lisp 源代码中使用了中文,那么在 load 的时候就会出错,由于 load 函数默认的编码格式是 latin,须要特别指定编码格式参数,假设源文件是 my-program.lisp 使用以下命令加载就没问题了: 函数
(load "my-program.lisp" :external-format :utf-8)固然,在 my-program.lisp 的第一行最好有这么一句:
;; -*- coding:utf-8 -*-这样就一切所有OK了。
全部的文件操做均可以附带这个参数,好比什么 open with-open-file 等等。 oop
为什么我找到定义 load 函数的 lisp 源文件,修改了 :external-format 参数的默认参数值,把它从原来的 :default 修改成 :utf-8 ,可仍是不起做用,实际执行时传进去的参数仍是 :default ,必需要在实际调用时指定这个参数呢? 编码
CCL实现中该函数在 l1-files.lisp 中定义,函数定义以下: spa
(defun load (file-name &key (verbose *load-verbose*) (print *load-print*) (if-does-not-exist :error) (external-format :default)) "Load the file given by FILESPEC into the Lisp environment, returning T on success. Extension: :PRINT :SOURCE means print source as well as value" (loop (restart-case (return (%load file-name verbose print if-does-not-exist external-format)) (retry-load () :report (lambda (stream) (format stream "Retry loading ~s" file-name))) (skip-load () :report (lambda (stream) (format stream "Skip loading ~s" file-name)) (return nil)) (load-other () :report (lambda (stream) (format stream "Load other file instead of ~s" file-name)) (return (load (choose-file-dialog) :verbose verbose :print print :if-does-not-exist if-does-not-exist))))))[2013-01-28 更新]