用 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 更新]