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'),可以替换字母替换那些字符,无论是在文件本身读取之前还是在读取期间阅读过程.
您需要找出文件使用的文本编码.然后告诉WITH-OPEN-FILE使用正确的.
请参阅SBCL手册:外部格式
例:
(with-open-file (stream pathname :external-format '(:utf-8 :replacement #\?))
(read-line stream))
Run Code Online (Sandbox Code Playgroud)