这可能是非常基本的,但我不知道还能在哪里问。我正在尝试从用葡萄牙语编写的文件处理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')可以替换那些字母的字符,无论是在阅读之前在文件本身中完成还是在阅读过程。
答案 0 :(得分:5)
您需要找出文件使用的文本编码。然后告诉WITH-OPEN-FILE
使用正确的。
请参阅SBCL手册:External Formats
示例:
(with-open-file (stream pathname :external-format '(:utf-8 :replacement #\?))
(read-line stream))