2012-02-16 24 views
5

Tôi là người dùng đầu của cả Emacs và Clojure, kiểm tra môi trường làm việc của tôi với một số xử lý văn bản đơn giản. Tôi gặp sự cố khi tải Slime REPL để in văn bản UTF-8 được lưu trữ trong một vectơ đúng cách.In văn bản UTF-8 trong chất nhờn REPL

tôi bắt đầu bằng cách đọc nội dung của một tập tin (một cuốn từ điển của Tocharian B) vào một vector:

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

sau đó tôi cố gắng để có được một đường từ vector, và tôi nhận được rác:

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

tôi có thể nhập vào chuỗi vào Slime REPL và làm cho nó trở lại như nó phải được:

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). " 

và tôi c bản in ra đĩa mà không có bất kỳ sự cố nào:

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). "] 

Và nhận các dòng từ véc tơ từ các REPL khác (ví dụ: clj, lein repl) cũng hoạt động tốt. Chỉ khi tôi cố xem xét nội dung của vectơ trong Slime REPL thì có vấn đề.

Điều gì đang xảy ra ở đây? Có một số thông tin sai lạc giữa Emacs và Swank không? Làm thế nào tôi có thể sửa lỗi này?

+0

Lạ. Kết quả của '(int \ ṃ)' khi được nhập vào REPIME SLIME là gì? –

+0

Điều đó mang lại cho tôi '7747'. – nmashton

+0

Vì đó là câu trả lời đúng, phải có điều gì đó sai với cách đọc tệp. '((toch 44) 91)' cũng mang lại '7747'. Nếu có, thì vấn đề này là một bí ẩn hoàn toàn đối với tôi. Nếu, mặt khác, nó không, sau đó bạn cần phải kiểm tra những gì Java mã hóa giả định khi đọc các tập tin. –

Trả lời

3

Hãy thử đặt

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

vào .emacs tập tin của bạn (hoặc thiết lập và lưu biến qua M-x customize-variable).

Ngoài ra, hãy đảm bảo rằng bạn đang chạy Clojure từ bên trong ngôn ngữ được bật UTF-8 (nếu bạn đang sử dụng Un * x và sử dụng Leiningen, hãy thử một cái gì đó như env LC_ALL=en_US.UTF-8 lein swank).

+0

Thật không may, không ai trong số những sửa chữa nó. Tôi đã có hệ thống mã hóa slime-net được đặt thành utf-8-unix. Thay đổi ngôn ngữ của máy chủ swank đã không thay đổi bất cứ điều gì. – nmashton

+1

thẻ này đã giúp tôi rất nhiều – claj

Các vấn đề liên quan