[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: form のエンコード



Katsumi Yamaoka <yamaoka@xxxxxxx> writes:

>> form のデータにエンコードできない文字列が入っていてもそのまま送信していた
>> (アクセントつき英字を euc-jp でエンコードして送るなど)ので、編集を終わっ
>> た時点および textarea への入力を保存する時点で確認するようにしました。
>
> Emacs 21 と XEmacs に無い関数を使っているのはちょっとマズいので、
> 例えば添付のパッチのようにするのはいかがでしょう?

確認不足でした、すみません。 unencodable-char-position() がない時に完全に
消してしまうのも少し不安です。以下のコードだと動きますか?

>> サーバの coding-system ではエンコードできない文字があっても正確に保存/復
>> 元ができるようになりますし、サーバが coding-system を変更しても文字化けが
>> 起こらずにすみます。しかし、その一方で一部の既存のバックアップが文字化け
>> してしまうという問題もあります :-(
>
> 既存のものは従来とおりに扱って、新しいものには
>
> ;-*- coding: utf-8; -*-
>
> のようなものを付けるのではどうですか?

これより coding-system-for-read のほうが優先されてしまいませんか?
--- w3m-form.el.~1.167.~	Thu Dec 27 03:32:27 2007
+++ w3m-form.el	Mon Jan  7 19:58:34 2008
@@ -223,13 +223,23 @@
   `(cdr (w3m-form-get-property ,form ,id :value)))
 (defun w3m-form-coding-system-accept-region-p (&optional from to coding-system)
   "Check whether `coding-system' can encode specified region."
-  (let ((pos (unencodable-char-position (or from (point-min))
-					(or to   (point-max))
-					(or coding-system 
-					    w3m-form-input-textarea-coding-system))))
-    (or (not pos)
-	(y-or-n-p (format "\"%c\" would not be accepted. Continue? "
-			  (char-after pos))))))
+  (w3m-static-if (fboundp unencodable-char-position)
+      (let ((pos (unencodable-char-position (or from (point-min))
+					    (or to   (point-max))
+					    (or coding-system 
+						w3m-form-input-textarea-coding-system))))
+	(or (not pos)
+	    (y-or-n-p (format "\"%c\" would not be accepted. Continue? "
+			      (char-after pos)))))
+    (let ((str (buffer-substring from to))
+	  (coding (or coding-system 
+		      w3m-form-input-textarea-coding-system)))
+      (or (string= str
+		   (decode-coding-string
+		    (encode-coding-string str coding)
+		    coding))
+	  (y-or-n-p "This text would not be accepted. Continue? ")))))
+
 (defun w3m-form-get-by-name (form name)
   (let ((plist (w3m-form-plist form))
 	pair value)
--
青田