character-encoding - 如何处理 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 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/

相关文章:

common-lisp - 由两个管道包围的关键字符号

lisp - 在没有引用运算符的 LISP 中输入参数(属性列表/语义网络/基本函数)

java - 如何从 Java 将转义字符打印到 Windows 控制台

functional-programming - 哪个函数在堆栈使用效率和时间方面最好

C# - 获取字符串中的整数字节数组

macros - let* 和 set 的区别?在普通 Lisp 中

lisp - 为什么我会收到此 lambda 表达式错误,我该怎么办?

lisp - lisp中的分布式函数合并两个列表

php - 如何使 PHP like_text() 函数适用于日语字符(汉字、片假名和平假名)?

mysql - 可怕的 MySQL 导入编码问题 - 重新审视