这可能是非常基本的,但我不知道还能问哪里。我正在尝试从用葡萄牙语编写的文件中处理 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 手册:External Formats
例子:
(with-open-file (stream pathname :external-format '(:utf-8 :replacement #\?))
(read-line stream))
关于character-encoding - 如何处理 Common Lisp (SBCL) 中的重音符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473029/