Subject: Re: bug#22436: read-coding-system uses wrong default when called from write-file

From: Eli Zaretskii <[email-masked]>
Date: Sat, 23 Jan 2016 13:31:59 +0200

> From: Richard Copley <[email-masked]>
> Date: Sat, 23 Jan 2016 09:45:39 +0000
> Cc: [email-masked]
> 
> > An encoding can be considered "wrong" if it fails to encode a
> > character.  AFAICS, chinese-iso-8bit does succeed in encoding it, so
> > the above definition of "wrong" doesn't fit.
> 
> It encodes the character to #xa1 #xae . When I open the file that is
> decoded as "¡®", without asking any questions. Isn't that what you
> saw? Are you going to tell me that's right too?

Emacs never asks questions when decoding text, only when encoding it.
When it visits a file, it guesses the encoding as best it can, and
that's what you see.

If you type "C-x RET c chinese-iso-8bit RET C-x C-f FILE RET", do you
see that character correctly decoded and correctly displayed?

> > In addition, there should be a *Warning* buffer displayed where you
> > have a long list of encodings Emacs knows about that can encode this
> > character; chinese-iso-8bit is just one of them, but the text there
> > tells you to select any one of them.  Do you see that buffer
> > displayed?
> 
> Yes, but chinese-iso-8bit is not on the list.

It is: that's the first one in the list, gb2312.  It's an alias for
chinese-iso-8bit, which is the formal name.

> > Given all this information, please do tell why you think what Emacs
> > did was wrong,
> 
> Do you seriously think it's the right thing to do? That's the last thing
> I expected. I don't know how to respond.
> 
> > and what did you think Emacs should have done instead.
> 
> I think Emacs should pick something less surprising and unhelpful,
> like utf-8.

Unless it gets some hint from the locale or from customizations, Emacs
does not prefer any encoding to any other encoding.  GB2312 is a very
reasonable choice in some locales, and might be what you want.  How is
Emacs to know, if your locale is US English?  All it knows is that
your default encoding cannot be used.

What Emacs did here is produce a list of all the encodings that can
encode that character, sorted them according what it knows about your
preferences (which is nothing in this case), and then picked up the
first encoding in the resulting list.  And that's what you see.  UTF-8
is also in the list, but it comes later.

If you want Emacs to prefer UTF-8, you can have that.  Just type

  M-x prefer-coding-system RET utf-8 RET

That's it, Emacs will from now on use UTF-8 whenever it can without
asking.  If you repeat your recipe after setting that preference, it
will silently encode the buffer/region with UTF-8, no questions asked.

You can have this customization in your ~/.emacs file, of course, if
you want it permanent.