Character encoding 如何处理公共Lisp(SBCL)中的重音?

Character encoding 如何处理公共Lisp(SBCL)中的重音?,character-encoding,lisp,common-lisp,sbcl,Character Encoding,Lisp,Common Lisp,Sbcl,这可能是很基本的,但我不知道还能问什么。我试图在SLIME REPL中处理一些文本信息,这些信息来自一个用葡萄牙语编写的文件,因此使用了很多重音字符,如é、á、ô等 当我处理英文文本时,我使用以下功能: (defun txt2list (name) (with-open-file (in name) (let ((res)) (do ((line (read-line in nil nil) (read-line in nil

这可能是很基本的,但我不知道还能问什么。我试图在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)))
无法读取重音字符,导致错误“八位字节序列#(195)无法解码”


所以我的问题是:有没有办法自动操纵这些角色?可以在不带重音的情况下替换字母中的这些字符('á'变为'a'),或者简单地删除这些字符('cômodo'变为'cmodo'),无论是在读取之前还是读取过程中在文件本身中执行。

您需要了解文件使用的文本编码。然后告诉
WITH-OPEN-FILE
使用正确的文件

请参阅SBCL手册:

例如:

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

非常感谢你。对于那些有同样疑问的人来说,它在这里起到了作用:拉丁语1。