Lisp:在将八位字节流转换为具有格式错误的字节的 EUC-JP 时,需要帮助从 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*
是包含 EUC-JP 编码文本二进制的变量。
我也尝试过#\KATAKANA_LETTER_NI
,而不是#\? 也只是“”。 到目前为止还没有任何效果。
任何帮助将不胜感激!
编辑:要重现 *EUC-JP*
,请获取 http: //blogs.yahoo.co.jp/akira_w0325/27287392.html 使用德拉克马。
The following does not work in this particular case, complaining that whatever you give it is not a character.
(handler-bind ((sb-int:character-coding-error
#'(lambda (c)
(invoke-restart 'use-value #\?))))
(sb-ext:octets-to-string *euc-jp* :external-format :euc-jp))
Where *euc-jp*
is a variable containing binary of EUC-JP encoded text.
I have tried #\KATAKANA_LETTER_NI
as well, instead of #\? and also just "". Nothing has worked so far.
Any help would be greatly appreciated!
EDIT: To reproduce *EUC-JP*
, fetch http://blogs.yahoo.co.jp/akira_w0325/27287392.html using drakma.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
SBCL 1.0.18 的
mb-util.lisp
中有一个表达式,如下所示:我不太熟悉 SBCL 的内部结构,但这看起来像是一个错误。 结果返回一个字符,而替代返回一个字符串(无论您通过
USE-VALUE
给它什么,它总是通过STRING
转换为字符串函数;参见octets.lisp
中DECODING-ERROR
的定义)。There's an expression in SBCL 1.0.18's
mb-util.lisp
that looks like this:I'm not very familiar with SBCL's internals, but this looks like a bug. The consequent returns a character, while the alternative returns a string (no matter what you give to it via
USE-VALUE
, it's always converted into a string by way of theSTRING
function; see the definition ofDECODING-ERROR
inoctets.lisp
).它对我有用:
*euc-jp*
可能是 (vector (unsigned-byte 8)) 以外的东西?It works for me:
Might
*euc-jp*
be something other than a (vector (unsigned-byte 8))?