|
From: Hideyuki SHIRAI <shirai <at> meadowy.org>
Subject: [emacs-w3m:07888] decode-coding-regin() with utf-8 Newsgroups: gmane.emacs.w3m Date: 2005-03-14 10:13:33 GMT (4 years, 15 weeks, 6 days, 15 hours and 30 minutes ago)
白井です。
いつからかはわかりませんが、最近の Emacs CVS Head の CJK モード
を使って、utf-8 (や utf-16) を扱う場合、Emacs 立ち上げ後、最初に
utf-8 を使うときに subst-jis などをロードしますが、そのときの関
数が decode-codeing-region() だと decode 結果が化けるようです。
例えば、
(let ((file (expand-file-name "/tmp/utf8.txt"))
(coding-system-for-write 'utf-8))
(with-temp-buffer
(insert "朝日新聞社")
(write-region (point-min) (point-max) file)))
とでもして、utf-8 なファイルを作っておき、
% emacs -q
で立ち上げた Emacs 上で、
(let ((file (expand-file-name "/tmp/utf8.txt"))
(buf1 (get-buffer-create "*tmp1*"))
(coding-system-for-read 'raw-text))
(pop-to-buffer buf1)
(erase-buffer)
(insert-file-contents file)
(set-buffer-multibyte nil)
(decode-coding-region (point-min) (point-max) 'utf-8)
(set-buffer-multibyte t))
を動かすと、「朝×××社」のように化けます。
# × の中身は省略
だけど、上記をもう一回動かしたり、最初に動かすものが以下のような
ものでは、ちゃんと「朝日新聞社」となります。
(let ((file (expand-file-name "/tmp/utf8.txt"))
(coding-system-for-read 'raw-text))
(decode-coding-string
(with-temp-buffer
(insert-file-contents file)
(buffer-string))
'utf-8))
とか、
(let ((file (expand-file-name "/tmp/utf8.txt"))
(buf1 (get-buffer-create "*tmp1*"))
(coding-system-for-read 'raw-text))
(encode-coding-string (string 53794) 'utf-8) ;; この行追加
(pop-to-buffer buf1)
(erase-buffer)
(insert-file-contents file)
(set-buffer-multibyte nil)
(decode-coding-region (point-min) (point-max) 'utf-8)
(set-buffer-multibyte t))
とか、
(let ((file (expand-file-name "/tmp/utf8.txt"))
(buf1 (get-buffer-create "*tmp1*"))
(coding-system-for-read 'utf-8))
(pop-to-buffer buf1)
(erase-buffer)
(insert-file-contents file))
は化けません。
報告だけで申し訳ありませんが、よろしくお願いします。
--
白井秀行 (mailto:shirai <at> meadowy.org)
|
|
|