如何处理Common Lisp(SBCL)中的重音?

Tal*_*nds 3 lisp sbcl common-lisp character-encoding

这可能是非常基本的,但我不知道还能在哪里问.我正在尝试从用葡萄牙语编写的文件中处理SLIME REPL中的一些文本信息,因此使用了许多重音字符 - 例如é,á,ô等.

当我用英语处理文本时,我使用以下功能:

(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)))
Run Code Online (Sandbox Code Playgroud)

无法读取重音字符,给出错误"八位字节序列#(195)无法解码".

所以我的问题是:有没有办法自动操纵这些字符?没有重音('á'变成'a')或者只是删除这些字符('cômodo'变成'cmodo'),可以替换字母替换那些字符,无论是在文件本身读取之前还是在读取期间阅读过程.

Rai*_*wig 5

您需要找出文件使用的文本编码.然后告诉WITH-OPEN-FILE使用正确的.

请参阅SBCL手册:外部格式

例:

 (with-open-file (stream pathname :external-format '(:utf-8 :replacement #\?))
   (read-line stream))
Run Code Online (Sandbox Code Playgroud)