2017-01-04 1 views
3

그건 아마 아주 기본적인 것이지만, 물어볼 다른 곳을 알지 못했습니다. 포르투갈어로 쓰여진 파일에서 SLIME REPL로 일부 텍스트 정보를 처리하려고합니다. 따라서 é, á, ô 등의 액센트 문자를 많이 사용합니다.SBCL (Common Lisp)에서 액센트를 처리하는 방법은 무엇입니까?

텍스트를 처리 할 때 영어로 나는 다음과 같은 기능을 사용합니다. "디코딩 할 수없는 옥텟 시퀀스 번호 (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에 올바른 것을 사용하도록하십시오. External Formats

예 :

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

가 대단히 감사합니다

는 SBCL 설명서를 참조하십시오. 똑같은 의심을 가진 사람들을 위해, latin1과 함께 작업했습니다. –

관련 문제