2012-02-16 9 views
5

Jestem początkującym użytkownikiem zarówno Emacs, jak i Clojure, testując moje środowisko pracy za pomocą prostego przetwarzania tekstu. Mam problemy z pobieraniem REPLUSU ŚLIMAKA do poprawnego drukowania tekstu UTF-8 zapisanego w wektorze.Drukowanie tekstu UTF-8 w szlamie REPL

zacznę odczytując zawartość pliku (A Dictionary of Tocharian B) do wektora:

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

I wtedy postarać się o linię z wektorem, a ja się śmieci:

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

mogę wprowadzić ciąg znaków w szlamie REPL i dostać go z powrotem tak jak powinno być:

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

i c drukowanie na dysk bez problemu:

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

I pobieranie linii z wektora z innych REPL (np. clj, lein repl) również działa dobrze. To tylko wtedy, gdy próbuję spojrzeć na zawartość wektora w REPLUMUMIE ŚLIMAKU, że jest jakikolwiek problem.

Co tu się dzieje? Czy jest jakaś nieporozumienie między Emacsem a Swank? Jak mogę to naprawić?

+0

Dziwne. Jaki jest wynik '(int \ ṃ)' po wpisaniu do REPLIKU SLIME? –

+0

To daje mi '7747'. – nmashton

+0

Ponieważ jest to poprawna odpowiedź, musi być coś złego w sposobie odczytywania pliku. '((toch 44) 91)' powinno również dawać '7747'. Jeśli tak, to ten problem jest dla mnie całkowitą tajemnicą. Jeśli, z drugiej strony, nie, musisz sprawdzić, jakie kodowanie Java przyjmuje podczas czytania pliku. –

Odpowiedz

3

spróbuj umieścić

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

do swojej .emacs plik (lub ustawienie i zapisanie zmiennej poprzez M-x customize-variable).

Dodatkowo upewnij się, że używasz Clojure z poziomu ustawień regionalnych z obsługą UTF-8 (jeśli korzystasz z Un * x i korzystasz z Leiningen, wypróbuj coś takiego jak env LC_ALL=en_US.UTF-8 lein swank).

+0

Niestety, żaden z nich nie naprawia tego. Miałem już system slime-net-coding ustawiony na UTF-8-UNIX. Zmiana ustawień narodowych serwera łopat niczego nie zmieniła. – nmashton

+1

ten tag bardzo mi pomógł – claj