[mew-win32 03973] Re: string-bytesの実行結果が違う?
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2003年 10月 1日 (水) 11:25:38 JST
From: 小関 吉則 (KOSEKI Yoshinori) <kose at example.com> さん曰く
Subject: [mew-win32 03972] Re: string-bytesの実行結果が違う?
Message-ID: <20030930ubrt2uz98.%kose at example.com>
Date: Tue, 30 Sep 2003 23:33:52 +0900
小関> これは NTEmacs21.3.50 (CVS HEAD)ですが、同じような結果になり
小関> ました。
UNIX 上の CVS HEAD でも同じ結果になりました。
小関> 以下の結果と同じバイト数なので、Mew 3.3 のバグじゃないかな。
小関>
小関> (let ((coding-system-for-read 'binary))
小関> (with-temp-buffer
小関> (set-buffer-multibyte nil)
小関> (insert-file "c:/Meadow2/2.00b2/bin/fiber.exe")
小関> (mew-region-bytes (point-min) (point-max) (current-buffer))))
小関> 44924
小関>
小関> (let ((coding-system-for-read 'binary))
小関> (with-temp-buffer
小関> (set-buffer-multibyte t)
小関> (insert-file "c:/Meadow2/2.00b2/bin/fiber.exe")
小関> (mew-region-bytes (point-min) (point-max) (current-buffer))))
小関> 48363
mew-region-bytes の中身は buffer-substring-no-properties して
string-bytes を呼んでいるだけなのですが、
(set-buffer-multibyte nil) => string-bytes()
だと length と一緒じゃん。という気がします。
doc> string-bytes is a built-in function.
doc> (string-bytes STRING)
doc>
doc> Return the number of bytes in STRING.
doc> If STRING is a multibyte string, this is greater than the length of STRING.
というふうに string-bytes は multibyte string を(まっとうに?)扱
えるものなのですよね?
なので Mew のバグというか Emacs21 のバグなのじゃないかな?
という気もするのですが、仕様の様な気もするので、
(defsubst mew-region-bytes (beg end buf)
(if (fboundp 'string-bytes)
(save-excursion
(set-buffer buf)
(if mew-gemacs-p
(prog2
(mew-set-buffer-multibyte nil)
(length (mew-buffer-substring beg end))
(mew-set-buffer-multibyte t))
(string-bytes (mew-buffer-substring beg end))))
(- end beg)))
でどうでしょうか。> かずさん
# 単純に unibyte で扱うと Meadow1.15(Emacs20.7) が変になりました。
# cache buffer の coding-system を raw-text に変えようとも思った
# のですが、波及する範囲が広そうでちょっと怖い。。。
--
白井秀行@unibyte と multibyte でごちゃごちゃ
Mew-win32 メーリングリストの案内