用 load 加載含中文的代碼只需附帶參數 :external-format :utf-8 就...

用 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 更新]
相關文章
相關標籤/搜索