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