2017-01-04 3 views
3

Это, наверное, очень просто, но я не знал, где еще спросить. Я пытаюсь обработать некоторую текстовую информацию в SLIME REPL из файла, написанного на португальском языке, поэтому использует множество символов акцентов, таких как é, á, ô и т. Д.Как обрабатывать акценты в Common Lisp (SBCL)?

Когда я обрабатываю тексты на английском языке я использую следующую функцию: «последовательность октетов # (195) не может быть декодированными»

(defun txt2list (name) 
    (with-open-file (in name) 
     (let ((res)) 
     (do ((line (read-line in nil nil) 
        (read-line in nil nil))) 
     ((null line) 
     (reverse res)) 
     (push line res)) 
    res))) 

, которые не могут читать акцентированные символы, что дает ошибку.

Так что мой вопрос: есть ли способ манипулировать этими символами автоматически? Это нормально заменить эти символы для буквы без акцента ('á' превращается в 'a') или просто удалять такие символы ('cômodo' превращается в 'cmodo'), независимо от того, сделано это в самом файле перед чтением или во время процесс чтения.

ответ

5

Вам нужно будет узнать, какая текстовая кодировка используется для файла. Затем скажите WITH-OPEN-FILE, чтобы использовать правильный.

Смотрите руководство SBCL: External Formats

Пример:

(with-open-file (stream pathname :external-format '(:utf-8 :replacement #\?)) 
    (read-line stream)) 
+0

Спасибо очень много. Для тех, кто имеет такое же сомнение, он работал здесь с: latin1. –

Смежные вопросы