unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Katsumi Yamaoka <yamaoka@jpl.org>
To: 25658@debbugs.gnu.org
Subject: bug#25658: 26.0.50; ELisp part in a mail isn't encoded properly
Date: Fri, 10 Feb 2017 09:56:47 +0900	[thread overview]
Message-ID: <b4m7f4yeucw.fsf@jpl.org> (raw)
In-Reply-To: <b4m7f50ks55.fsf@jpl.org>

On Thu, 09 Feb 2017 11:35:50 +0900, Katsumi Yamaoka wrote:
> In a message draft, an ELisp part containing non-ASCII letters,
> like the following, is not encoded properly.

> <#part type="application/emacs-lisp" disposition=inline>
> (defun mm-shr (handle)
>   ...
> 	 ;; Remove "soft hyphens".
> 	 (goto-char (point-min))
> 	 (while (search-forward "­" nil t)
> 	   (replace-match "" t t))
> <#/part>

;; Note that "­" is a soft hyphen.

What Gnus wants to do is:

(quoted-printable-encode-string
 (encode-coding-string "­" 'iso-8859-1))
 => "=AD"

However what is actually done is:

(with-temp-buffer
  ;; `mml-generate-mime-1' does:
  (set-buffer-multibyte t)
  (insert "­")
  ;; `mm-encode-body' does:
  (encode-coding-region (point-min) (point-max) 'iso-8859-1)
  ;; `mm-encode-buffer' does:
  (quoted-printable-encode-region (point-min) (point-max))
  (buffer-string))
 => "=3FFFAD"

Hmm.

(with-temp-buffer
  (set-buffer-multibyte t)
  (insert "­")
  (encode-coding-region (point-min) (point-max) 'iso-8859-1)
  (append (buffer-string) nil))
 => (4194221)

This would probably be the multibyte version of:

(append (encode-coding-string "­" 'iso-8859-1) nil)
 => (173)

Doesn't it mean we ought not to use `encode-coding-region'?
Anyway, I think what we should do here would be one of the
following two ways:

(with-temp-buffer
  (set-buffer-multibyte t)
  (insert "­")
  (encode-coding-region (point-min) (point-max) 'iso-8859-1)
  (set-buffer-multibyte nil)
  (quoted-printable-encode-region (point-min) (point-max))
  (buffer-string))
 => "=AD"

I'm not sure whether (set-buffer-multibyte nil) above does not do
anything other than converting characters to the unibyte version
one by one.  OTOH, this is what I often do:

(with-temp-buffer
  (set-buffer-multibyte t)
  (insert "­")
  (insert (prog1
	      (encode-coding-string (buffer-string) 'iso-8859-1)
	    (erase-buffer)
	    (set-buffer-multibyte nil)))
  (quoted-printable-encode-region (point-min) (point-max))
  (buffer-string))
 => "=AD"

Regards,





  reply	other threads:[~2017-02-10  0:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-09  2:35 bug#25658: 26.0.50; ELisp part in a mail isn't encoded properly Katsumi Yamaoka
2017-02-10  0:56 ` Katsumi Yamaoka [this message]
2017-02-10  7:51   ` Eli Zaretskii
2017-02-10 17:33     ` Glenn Morris
2017-02-12 23:05       ` Katsumi Yamaoka
2017-02-13  2:03         ` Glenn Morris
2017-02-13  5:44         ` Eli Zaretskii
2017-02-13  8:31           ` Katsumi Yamaoka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b4m7f4yeucw.fsf@jpl.org \
    --to=yamaoka@jpl.org \
    --cc=25658@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).