在slime REPL中打印UTF-8文本



我是Emacs和Clojure的新手,用一些简单的文本处理来测试我的工作环境。我在使用Slime REPL正确打印存储在矢量中的UTF-8文本时遇到问题。

我首先将一个文件(Tocharian B的字典)的内容读入一个向量:

user> (def toch
        (with-open [rdr (java.io.BufferedReader.
                         (java.io.FileReader. "/directory/toch.txt"))]
          (vec (line-seq rdr))))
=> #'user/toch

然后我试图从向量中得到一条线,结果得到了垃圾:

user> (toch 44)
=> " Examples :   /// kektseñe akappi ste ‘the body is an impurity’ (121b5), akappī = BHS aśuciṃ (529a3). "

我可以将字符串输入Slime REPL,并将其恢复为应有的状态:

user> " Examples :   /// kektseñe akappi ste ‘the body is an impurity’ (121b5), akappī = BHS aśuciṃ (529a3). "
=> " Examples :   /// kektseñe akappi ste ‘the body is an impurity’ (121b5), akappī = BHS aśuciṃ (529a3). "

我可以毫无问题地打印到磁盘:

user> (binding [*out* (java.io.FileWriter. "test.txt")]
        (prn (toch 44)))
=> nil
[Contents of test.txt: " Examples :   /// kektseñe akappi ste ‘the body is an impurity’ (121b5), akappī = BHS aśuciṃ (529a3). "]

从其他repl(例如clj、lein-repl)的矢量中获取行也很好。只有当我试图查看Slime REPL中向量的内容时,才有任何问题。

这是怎么回事?Emacs和Swank之间有没有沟通不畅?我该怎么解决这个问题?

尝试放置

(setq slime-net-coding-system 'utf-8-unix)

到您的.emacs文件中(或通过M-x customize-variable设置并保存变量)。

此外,请确保您在启用了UTF-8的区域设置中运行Clojure(如果您使用Un*x并使用Leiningen,请尝试env LC_ALL=en_US.UTF-8 lein swank)。

最新更新