--- es-wiki.el.~1.7.~	2001-07-18 09:51:12.000000000 +0900
+++ es-wiki.el	2002-10-25 21:28:46.000000000 +0900
@@ -27,6 +27,7 @@
 ;;; Code:
 (require 'emacs-wiki)
 (require 'elserv)
+(require 'mcs-20)
 
 ;; Set action as relative path!
 (defvar elserv-wiki-http-edit-form
@@ -121,21 +122,32 @@
 	      "]]\n")
     "No WikiNames"))
 
+(defun elserv-wiki-read-charset-from-html ()
+  "Read the html header information and return the charset information"
+  (let* (charset)
+    (goto-line 1)
+    (re-search-forward "content=\"text.html; charset=\\([^\"]+\\)")
+    (setq charset (intern (match-string 1)))
+    charset))
+
 (defun elserv-wiki-render-page (result name)
+  (let* (charset)
   (cond ((string= name emacs-wiki-index-page)
 	 (with-current-buffer (emacs-wiki-generate-index t t)
 	   (emacs-wiki-replace-markup "Wiki Index")
+	     (setq charset (elserv-wiki-read-charset-from-html))
 	   (elserv-set-result-header
 	    result
-	    (list 'content-type "text/html; charset=iso-2022-jp"))
+	      (list 'content-type (concat "text/html; charset=" (symbol-name charset))))
 	   (elserv-set-result-body result (encode-coding-string
 					   (buffer-string)
-					   'iso-2022-jp))
+					     charset))
 	   (kill-buffer (current-buffer))))
 	((string= name "WikiNames")
 	 (with-temp-buffer
 	   (insert (elserv-wiki-interwiki-page))
 	   (emacs-wiki-replace-markup "WikiNames")
+	     (setq charset (elserv-wiki-read-charset-from-html))
 	   (elserv-set-result-header
 	    result (list 'content-type "text/html"))
 	   (elserv-set-result-body result (buffer-string))))
@@ -150,20 +162,20 @@
 			       (format "Wiki page %s not found" name)))
 	     (with-temp-buffer
 	       (let ((modified-time (nth 5 (file-attributes file))))
-		 (insert-file-contents-as-binary file)
-		 (decode-coding-region (point-min) (point-max) 'iso-2022-jp)
+		   (insert-file-contents file)
 		 (setq buffer-file-name name)
 		 (emacs-wiki-replace-markup name)
+		   (setq charset (elserv-wiki-read-charset-from-html))
 		 (set-buffer-modified-p nil)
 		 (elserv-set-result-header
 		  result
-		  (list 'content-type "text/html; charset=iso-2022-jp"
+		    (list 'content-type (concat "text/html; charset=" (symbol-name charset))
 			'last-modified (format-time-string "%a, %e %b %Y %T %Z"
 							   modified-time)))
 		 (elserv-set-result-body result
 					 (encode-coding-string
 					  (buffer-string)
-					  'iso-2022-jp)))))))))
+					    charset))))))))))
 
 (defun elserv-wiki-edit-page (result page-name)
   (let ((emacs-wiki-http-edit-form elserv-wiki-http-edit-form))
@@ -172,13 +184,14 @@
       (with-temp-buffer
 	(emacs-wiki-setup-edit-page page-name)
 	;; this is required because of the : in the name
+	(let* ((charset (detect-mime-charset-region (point-min) (point-max))))
 	(elserv-set-result-header
 	 result
-	 (list 'content-type "text/html; charset=iso-2022-jp"))
+	   (list 'content-type (concat "text/html; charset=" (symbol-name charset))))
 	(elserv-set-result-body result
 				(encode-coding-string
 				 (buffer-string)
-				 'iso-2022-jp))))))
+				   'iso-2022-jp)))))))
 
 (defun elserv-wiki-change-page (result request)
   (let* ((res (elserv-url-decode (plist-get request 'body)))
@@ -246,13 +259,14 @@
     (with-current-buffer (emacs-wiki-grep term)
       (emacs-wiki-wikify-search-results term)
       (emacs-wiki-replace-markup "Search Results")
+      (let* ((charset (elserv-wiki-read-charset-from-html)))
       (elserv-set-result-header
        result
-       (list 'content-type "text/html;charset=iso-2022-jp"))
+	 (list 'content-type (concat "text/html;charset=" (symbol-name charset))))
       (elserv-set-result-body result
 			      (encode-coding-string
-			       (buffer-string) 'iso-2022-jp))
-      (kill-buffer (current-buffer)))))
+				 (buffer-string) charset))
+	(kill-buffer (current-buffer))))))
   
 (defun elserv-wiki-function (result path ppath request)
   (if (string= path "")
