簡體   English   中英

Lisp:將字節流轉換為字節格式錯誤的EUC-JP時,需要幫助以使SBCL表現出正確的行為

[英]Lisp: Need help getting correct behaviour from SBCL when converting octet stream to EUC-JP with malformed bytes

以下內容在這種特殊情況下不起作用,抱怨您提供的任何內容都不是字符。

(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* ,請使用drakma獲取http://blogs.yahoo.co.jp/akira_w0325/27287392.html

SBCL 1.0.18的mb-util.lisp中有一個表達式,如下所示:

(if code
    (code-char code)
    (decoding-error array pos (+ pos bytes) ,format
                    ',malformed pos))

我對SBCL的內部內容不是很熟悉,但這看起來像是個錯誤。 結果結果返回一個字符,而替代結果返回一個字符串(無論您通過USE-VALUE給出什么,它總是通過STRING函數轉換為字符串;請參閱octets.lisp中的octets.lisp DECODING-ERROR定義) 。

這個對我有用:

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))嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM