[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 メーリングリストの案内