我是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之间是否存在误解?我该如何解决这个问题?
答案 0 :(得分:3)
尝试放
(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
)。