【问题标题】:Printing UTF-8 text in slime REPL在 slime REPL 中打印 UTF-8 文本
【发布时间】:2012-03-08 01:28:07
【问题描述】:

我是 Emacs 和 Clojure 的初学者,我通过一些简单的文本处理来测试我的工作环境。我在让 Slime REPL 正确打印存储在向量中的 UTF-8 文本时遇到问题。

我首先将文件(吐火罗 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 \ṃ) 输入到 SLIME REPL 的结果是什么?
  • 既然是正确答案,那么文件的读取方式肯定有问题。 ((toch 44) 91) 也应该产生 7747。如果是这样,那么这个问题对我来说是一个完全的谜。另一方面,如果不是,那么您需要检查 Java 在读取文件时采用的编码。
  • 对不起,(int (.charAt (toch 44) 91)) 是我的意思。
  • 它给出了错误的答案。所以我用 InputStreamReader 和 FileInputStream 替换了 FileReader,并为 InputStreamReader 提供了正确的编码,现在它可以工作了。所以问题一定是 FileReader 假设了错误的编码。谢谢!

标签: emacs utf-8 clojure slime swank-clojure


【解决方案1】:

试试看

(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)。

【讨论】:

  • 不幸的是,这些都没有解决它。我已经将 slime-net-coding-system 设置为 utf-8-unix。更改 swank 服务器的区域设置并没有改变任何东西。
猜你喜欢
  • 2021-12-07
  • 2014-03-17
  • 1970-01-01
  • 2016-12-03
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多