用 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 更新]
相关文章
相关标签/搜索