File io 如何使用SBCL Common Lisp从文件中加载非标准字符?
尝试 加载包含一行字的文件内容:File io 如何使用SBCL Common Lisp从文件中加载非标准字符?,file-io,character-encoding,common-lisp,sbcl,File Io,Character Encoding,Common Lisp,Sbcl,尝试 加载包含一行字的文件内容:λέξη (with-open-file (s PATH-TO-FILE :direction :input) (let ((a (read-line s))) (print a))) 输出 "" T funny characters (nothing like the original contents) T 尝试: (with-open-file (s PATH-TO-FILE :direction :input) (let ((buff
λέξη
(with-open-file (s PATH-TO-FILE :direction :input)
(let ((a (read-line s)))
(print a)))
输出
""
T
funny characters (nothing like the original contents)
T
尝试:
(with-open-file (s PATH-TO-FILE :direction :input)
(let ((buffer ""))
(do ((character (read-char s nil) (read-char s nil)))
((null character))
(setf buffer (concatenate 'string buffer (format nil "~a" character))))
(format t "~a" buffer)))
输出
""
T
funny characters (nothing like the original contents)
T
我想做的是加载包含这些非标准字符的所有文件行。
然后我希望能够将这些单词输出到控制台或通过LTK小部件(例如按钮上的文本)。您需要传递到,其中
X
是文件中使用的实际编码(:utf-8
或其他)
因为它会打印
("ZERO_WIDTH_NO-BREAK_SPACE" 65279)
("GREEK_SMALL_LETTER_LAMDA" 955)
("GREEK_SMALL_LETTER_EPSILON_WITH_TONOS" 941)
("GREEK_SMALL_LETTER_XI" 958)
("GREEK_SMALL_LETTER_ETA" 951)
您可以看到,您确实正确地读取了文件
您现在的问题是如何将这些非ASCII字符打印到屏幕上,这是一个完全不同的问题。当您计算
(setf sb impl::*默认外部格式*:utf-8)
并重试时会发生什么情况?我将输入文件中的编码更改为UTF8,然后将建议的行添加到第二个版本的代码中并进行了计算。输出为:??
换行T
。添加此附加行的第一个版本仍然输出”
新行T
谢谢您的帮助!如果我使用:utf-8,它仍然输出?
,并且文件是使用utf-8编码“另存为”的。这并不意味着它读错了-它可能是打印错了。嗯。你能告诉我怎样输出它吗?通常如何处理?试试我的代码。它打印什么?“在计算从第25行开始的表单时,在线程(…)中的UNBOUND-VARIABLE上调用第0列(…)调试器时,变量C未绑定。”还警告未定义的变量:跨C打印未定义的函数:FOR