Xml 公共Lisp中的字符集
我一直在开发一个通用的lisp程序,该程序解析两个XML文件,并以自定义方式将它们组合成第三个XML。不幸的是,lisp使用CP1252字符集,而我的XML文件使用UTF-8,并且包含一些不能在CP1252中使用的日语字符 我一直试图通过添加Xml 公共Lisp中的字符集,xml,windows,xml-parsing,common-lisp,clisp,Xml,Windows,Xml Parsing,Common Lisp,Clisp,我一直在开发一个通用的lisp程序,该程序解析两个XML文件,并以自定义方式将它们组合成第三个XML。不幸的是,lisp使用CP1252字符集,而我的XML文件使用UTF-8,并且包含一些不能在CP1252中使用的日语字符 我一直试图通过添加 :external-format 'charset:UTF-8 加载(如建议的)和读取行(因为为什么不)功能,但clisp仍然抛出此错误: 读取行:字符集CP1252转换中的无效字节#x81 有没有办法用我的代码做我想做的事情?我对lisp还是相当陌生的
:external-format 'charset:UTF-8
加载(如建议的)和读取行(因为为什么不)功能,但clisp仍然抛出此错误:
读取行:字符集CP1252转换中的无效字节#x81
有没有办法用我的代码做我想做的事情?我对lisp还是相当陌生的
全读功能代码:
(defun readXML (stream libSize)
(defparameter lib nil)
(defparameter x 1)
(loop
(defparameter lib (cons (read-line stream :external-format 'charset:UTF-8) lib))
(defparameter x (+ x 1))
(when (> x libSize) (return lib))))
错误
此函数不接受参数
它确实接受几个可选参数,但它们与此无关
用编码
这是一个“顶级”操作符,它创建一个全局。
不要在函数中使用它。
用那里代替它。
循环
(见下文)也会绑定变量
正确代码
解释
- 打开
文件,将
绑定到结果,并确保流 出口关闭流
- 这是一种非常先进的方法
迭代工具。它将
绑定到每个连续行,计数 使用行
对其进行编辑,并将行收集到返回值中:行号
循环
(见下文)也会绑定变量
正确代码
解释
- 打开
文件,将
绑定到结果,并确保流 出口关闭流
- 这是一种非常先进的方法
迭代工具。它将
绑定到每个连续行,计数 使用行
对其进行编辑,并将行收集到返回值中:行号
它们详细解释了每个运算符。
读取行
不接受:外部格式
。另外,我认为您混淆了load
和open
。最后,请包括您的完整代码。添加外部格式读取行只是一个随机的事情我尝试。关于加载-我一直在从windows命令提示符启动clisp并使用(加载“filename.lisp”:外部格式“charset:UTF-8)。您的“filename.txt”
是否包含lisp表单?如果是,为什么要给它“txt”
文件类型而不是更常见的“lisp”
或“l”
或“cl”
?如果不是,为什么要用它?我在上面输入注释时出错了-它是.lisp而不是.txt。“lisp使用CP1253字符集”?Lisp不是一种语言,它是一个语言家族,其中任何一种语言都可能有多个实现,每个实现可能以不同的方式支持不同的字符集。读取行
不接受:外部格式
。另外,我认为您混淆了load
和open
。最后,请包括您的完整代码。添加外部格式读取行只是一个随机的事情我尝试。关于加载-我一直在从windows命令提示符启动clisp并使用(加载“filename.lisp”:外部格式“charset:UTF-8)。您的“filename.txt”
是否包含lisp表单?如果是,为什么要给它“txt”
文件类型而不是更常见的“lisp”
或“l”
或“cl”
?如果不是,为什么要用它?我在上面输入注释时出错了-它是.lisp而不是.txt。“lisp使用CP1253字符集”?Lisp不是一种语言,它是一个语言家族,任何一种语言都可能有多种实现,每一个都可能以不同的方式支持不同的字符集。:REPEAT MAX-LINES
会更简单一些,因为行号
不用于其他任何东西。:REPEAT MAX-LINES
会更简单一些,因为行号
不用于其他任何东西。
(defun read-lines (file-name max-lines)
"Open the file and read it line-by-line, at most `max-lines'."
(with-open-file (stream file-name :external-format charset:utf-8)
(loop :for line = (read-line stream nil nil)
:for line-number :upfrom 0
:while (and line (< line-number max-lines))
:collect line)))
(defun read-lines (file-name max-lines)
"Open the file and read it line-by-line, at most `max-lines'."
(with-open-file (stream file-name :external-format charset:utf-8)
(loop :for line = (read-line stream nil nil)
:repeat max-lines
:while line
:collect line)))