[mew-win32 04117] Re: Firefox -> mozex -> mailto -> Mew

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2004年 10月 13日 (水) 12:19:12 JST


From: Hideyuki SHIRAI (白井秀行) <shirai at example.com> 曰く
Subject: [mew-win32 04116] Re: Firefox -> mozex -> mailto -> Mew
Message-ID: <20041013.101953.20486595.shirai.hideyuki at example.com>
Date: Wed, 13 Oct 2004 10:19:53 +0900 (JST)

> > Emacs で、UTF-8 を使えるようにしていますか?
> 
> UTF-8 (というか multibyte 文字)はどう考えても動きません。作った
> 当時、UTF-8 を扱える Emacs が無かったので ^^;;;
> 
> # しばらくお待ちを。。。

作ってみました。contrib/mew-browse.el にパッチをあてくださいませ。

なお、http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/appendix/notes.html#non-ascii-chars
を読むと、

>> 注意。古いユーザエージェントの中には、HTMLのURIを、当該文書の
>> 文字符号化方法をそのまま適用して処理するものもある。

などということも書いてありますが、無視(というか無理)です。

-- 
白井秀行 (mailto:shirai at example.com)
-------------- next part --------------
Index: mew-browse.el
===================================================================
RCS file: /cvsroot/shirai/mew/mew/contrib/mew-browse.el,v
retrieving revision 1.4
diff -u -r1.4 mew-browse.el
--- mew-browse.el	2001/07/13 00:49:04	1.4
+++ mew-browse.el	2004/10/13 03:14:58
@@ -3,7 +3,7 @@
 ;; Author: Hideyuki SHIRAI <shirai at example.com>
 ;; Modify: Shuichi Kitaguchi <kit at example.com>
 ;; Created: May 19, 1999
-;; Revised: May 24, 1999
+;; Revised: Oct 13, 2004
 
 ;;;
 ;;; ~/.emacs settings.
@@ -216,14 +216,28 @@
 
 (defun mew-browse-url-mailto-hex-to-string (str)
   (save-match-data
-    (while (string-match "%\\([0-9a-fA-F][0-9a-fA-F]\\)" str)
-      (setq str (concat (substring str 0 (match-beginning 0))
-			(make-string
-			 1
-			 (mew-browse-url-mailto-2hexs-to-int
-			  (substring str (match-beginning 1) (match-end 1))))
-			(substring str (match-end 0)))))
-    str))
+    (with-temp-buffer
+      (mew-set-buffer-multibyte nil)
+      (insert str)
+      (goto-char (point-min))
+      (let ((doit t) char)
+	(while (re-search-forward "%\\([0-9a-fA-F][0-9a-fA-F]\\)" nil t)
+	  (setq char (mew-browse-url-mailto-2hexs-to-int
+		      (buffer-substring (match-beginning 1) (match-end 1))))
+	  (delete-region (match-beginning 0) (match-end 0))
+	  (insert char))
+	(unless (equal (mew-find-cs-region (point-min) (point-max)) '(ascii)) ;; xxx
+	  (unless mew-internal-utf-8p
+	    (condition-case nil
+		(require 'un-define)
+	      (file-error
+	       (setq doit nil)
+	       (delete-region (point-min) (point-max))
+	       (insert "To handle this, install Mule-UCS for UTF-8."))))
+	  (when doit
+	    (decode-coding-region (point-min) (point-max) 'utf-8)))
+	(mew-set-buffer-multibyte t)
+	(buffer-string)))))
 
 (defun mew-browse-url-mailto-2hexs-to-int (hex)
   (+ (* 16 (mew-hexchar-to-int (aref hex 0)))


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