2

以下は、この特定のケースでは機能せず、指定したものは文字ではないと不平を言っています。

(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 *euc-jp*-JP でエンコードされたテキストのバイナリを含む変数です。

#\KATAKANA_LETTER_NI#\? の代わりに、私も試してみました。また、「」だけです。これまでのところ何も機能していません。

どんな助けでも大歓迎です!

編集: 再現するには、 drakma を使用してhttp://blogs.yahoo.co.jp/akira_w0325/27287392.html*EUC-JP*をフェッチします。

4

2 に答える 2

1

SBCL 1.0.18 には、次のmb-util.lispような式があります。

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

私は SBCL の内部構造に詳しくありませんが、これはバグのようです。コンシークエントは文字を返しますが、オルタナティブは文字列を返します ( を介して何を指定してもUSE-VALUE、常に関数を介して文字列に変換されます。 inSTRINGの定義を参照してください)。DECODING-ERRORoctets.lisp

于 2009-01-08T16:46:00.503 に答える