Can't send messages containing hankaku chars

Katsumi Yamaoka yamaoka @ jpl.org
2003年 12月 17日 (水) 08:36:23 JST


semi-1_14 枝と emiko-1_14 枝の SEMI で対策しました。

>>>>> In [emacs-mime-ja : No.01589] 山岡 wrote:

> いわゆる半角カタカナを含むメッセージを送信しようとすると、次のよ
> うなエラーが起きます。これは先端の Emacs 21.3.50 だけで、21.3 で
> は問題ありません。なお、SEMI と FLIM は先端のもので試しました。

> Debugger entered--Lisp error: (error "Multibyte character in data for base64 encoding")
>   base64(125 131)
>   mime-encode-region(125 131 "base64")
>   mime-edit-normalize-body()
>   mime-edit-translate-region(89 94 "Multipart_Tue_Dec_16_21:42:34_2003-1")
>   mime-edit-translate-body()
>   run-hooks(mime-edit-translate-buffer-hook)
>   byte-code("..." [run-hooks mime-edit-translate-buffer-hook] 2)
>   mime-edit-translate-buffer()
>   mime-edit-preview-message()
>   call-interactively(mime-edit-preview-message)

Multibyte なバッファにある unibyte 文字列を (replace-match "\\N")
のようなもので置き換えると、先端の Emacs では multibyte 文字列に
変換されてしまうようです。(先端と言っても、Emacs の CVS が止まっ
てしまった 1日前のものです。:-)

バッファが multibyte なんだからそうなって当然という考えもあると
思いますが、\N による置き換えでは、元の文字列がそのまま返ってく
る方が自然ではないでしょうか。加えて、以下のような一貫性の無さも
指摘しておきます。

(let* ((default-enable-multibyte-characters t)
       (string (encode-coding-string "遥" 'shift_jis)))
  (string-match "\\(.+\\)" string)
  (append (replace-match "\\1" nil nil string) nil))
 => (151 121)

(let* ((default-enable-multibyte-characters t)
       (string (encode-coding-string "遥" 'shift_jis)))
  (with-temp-buffer
    (insert string)
    (goto-char (point-min))
    (looking-at "\\(.+\\)")
    (replace-match "\\1")
    (append (buffer-string) nil)))
 => (158 2231 121)
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>




More information about the Emacs-mime-ja mailing list