2012-02-16 7 views
5

Sono un principiante di Emacs e Clojure, testando il mio ambiente di lavoro con una semplice elaborazione di testo. Sto riscontrando problemi nel far sì che il REPL di Slime stampi correttamente il testo UTF-8 memorizzato in un vettore.Stampa di testo UTF-8 in melma REPL

ho iniziare leggendo il contenuto di un file (un dizionario di TB B) in un vettore:

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

Allora provo ad ottenere una linea dal vettore, e ottengo spazzatura:

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

posso inserire la stringa nella Slime REPL e farlo ritornare come dovrebbe essere:

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

e C una stampa su disco senza problemi:

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

E ottenere linee dal vettore da altri REPL (ad es. clj, lein repl) funziona anche bene. È solo quando provo a guardare il contenuto del vettore all'interno del REPL Slime che c'è qualche problema.

Cosa sta succedendo qui? C'è qualche errore di comunicazione tra Emacs e Swank? Come posso risolvere questo?

+0

Strano. Qual è il risultato di '(int \ ṃ)' quando inserito in SLIME REPL? –

+0

Questo mi dà '7747'. – nmashton

+0

Poiché quella è la risposta corretta, ci deve essere qualcosa di sbagliato nel modo in cui il file viene letto. '((44) 91)' dovrebbe produrre '7747' pure. Se lo fa, allora questo problema è un mistero completo per me. Se, d'altra parte, non lo fa, allora è necessario controllare quale codifica assume Java durante la lettura del file. –

risposta

3

provare a mettere

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

nella vostra .emacs di file (o l'impostazione e salvare la variabile tramite M-x customize-variable).

Inoltre, assicurarsi di eseguire Clojure da una locale con UTF-8 abilitata (se si utilizza Un * x e si utilizza Leiningen, provare qualcosa come env LC_ALL=en_US.UTF-8 lein swank).

+0

Sfortunatamente, nessuno dei due lo risolve. Ho già impostato il sistema di codifica della melma-rete su utf-8-unix. La modifica delle impostazioni locali del server Swank non ha modificato nulla. – nmashton

+1

questo tag mi ha aiutato molto – claj