我是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之间有什么误解吗?我该如何解决这个问题?
(int \ṃ)
的结果是什么? - Matthias Benkard((toch 44) 91)
也应该得到7747
。如果确实如此,那么这个问题对我来说就是一个完全的谜。另一方面,如果不是这样,那么您需要检查Java在读取文件时所假定的编码方式。 - Matthias Benkard(int (.charAt (toch 44) 91))
。 - Matthias Benkard