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(),并已被接受。感谢你为我指出了正确的源文件,我可能会修改一下,希望不会破坏它:-)