[mew-dist 19194] Re: mew-mime-content-type

Shun-ichi GOTO gotoh at example.com
2001年 10月 5日 (金) 15:53:51 JST


>>>>> at Fri, 05 Oct 2001 12:46:16 +0900 (JST)
>>>>> kazu == Kazu Yamamoto (山本和彦) <kazu at example.com> said,

kazu> Elisp で書いてもよかったんですが、mewencode に組み込みました。

kazu> アルゴリズム:
kazu> 	先頭 1024 バイト中に、0 or 128 or 255 があればバイナリだと思う。
kazu> 	# 他にぐっとくる値はありますか?

elisp で insert-file-contents して detect-coding-region
0x00, 0x80, 0xFF なんて判定方よりは間違いが少ないような気がします。
以下のようなので C:\Windows 以下をちょりっとテストしてみましたが、
UTF なファイルも含めて全部よさげではありました。それ以上のテストは
してないです。

(defun mew-file-binary-p (file)
  (interactive "fFilename: ")
  (with-temp-buffer
    (if (or (not (file-exists-p file))
	    (file-directory-p file))
	nil				; not file
      (mew-flet
	(insert-file-contents file nil 0 10240))
      (let ((codings (detect-coding-region (point-min) (point-max))))
	(list
	(if (or (null codings)
		(eq (car codings) 'no-conversion))
	    'binary
	  (goto-char 1)
	  (condition-case nil
	      (decode-coding-region (point-min) (point-max) (car codings)))
	  (if (search-forward "\x00" nil t)
	      'binary
	    'text))
	codings)))))

ただいずれにせよ、所詮はguess なので、あくまでも第一候補として
  "text のように思うので text/plain にするよ" 
などと確認するのがいいかなとおもうです。

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN



Mew-dist メーリングリストの案内