Unicode Lisp:在将八位字节流转换为格式错误的EUC-JP时,需要从SBCL获得正确行为的帮助吗
以下内容在这种特殊情况下不起作用,它抱怨说,无论你给它什么,它都不是一个角色Unicode Lisp:在将八位字节流转换为格式错误的EUC-JP时,需要从SBCL获得正确行为的帮助吗,unicode,lisp,sbcl,Unicode,Lisp,Sbcl,以下内容在这种特殊情况下不起作用,它抱怨说,无论你给它什么,它都不是一个角色 (handler-bind ((sb-int:character-coding-error #'(lambda (c) (invoke-restart 'use-value #\?)))) (sb-ext:octets-to-string *euc-jp* :external-format :euc-jp)) 其中,*euc-jp*是
(handler-bind ((sb-int:character-coding-error
#'(lambda (c)
(invoke-restart 'use-value #\?))))
(sb-ext:octets-to-string *euc-jp* :external-format :euc-jp))
其中,*euc-jp*
是一个包含二进制euc-jp编码文本的变量
我也试过\KATAKANA\u LETTER\u NI
,而不是#\?而且也只是“。到目前为止,一切都不起作用
任何帮助都将不胜感激
编辑:要复制*EUC-JP*
,请使用drakma提取。它适用于我:
CL-USER> (handler-bind ((sb-int:character-coding-error
#'(lambda (c)
(declare (ignore c))
(invoke-restart 'use-value #\?))))
(sb-ext:octets-to-string (make-array '(16)
:element-type '(unsigned-byte 8)
:initial-contents '#(181 65 217 66 164 67 181 217 164 223 164 222 164 185 161 163))
:external-format :euc-jp))
"?A?B?C休みます。"
*euc jp*
可能不是(向量(无符号字节8))?在SBCL 1.0.18的mb util.lisp
中有一个表达式如下所示:
(if code
(code-char code)
(decoding-error array pos (+ pos bytes) ,format
',malformed pos))
我不太熟悉SBCL的内部结构,但这看起来像个bug。结果返回一个字符,而另一个返回一个字符串(无论您通过
USE-VALUE
给它什么,它总是通过string
函数转换为字符串;请参阅octets.lisp
中的DECODING-ERROR
的定义)。请发布一个可复制的片段,例如,你的EUC-JP中有什么?你能稍微格式化一下你的代码吗?换行符和适当的缩进可以在“(invoke restart…”之前和处理程序绑定体的开始处插入。这对我也适用,但不幸的是,在euc jp序列上不适用-解码可以正常进行,直到它必须实际插入一个“?”之后它就死了。你可以看到,由于大多数网站都在调试器中正确弹出=|我已将其报告为bug(),并已被接受。感谢你为我指出了正确的源文件,我可能会修改一下,希望不会破坏它:-)