[1.7] Proposal: the filename encoding in C locale uses UTF-8 instead of SO/UTF-8

Corinna Vinschen corinna-cygwin@cygwin.com
Thu May 14 20:55:00 GMT 2009


On May 14 19:23, Corinna Vinschen wrote:
> On May 15 01:34, IWAMURO Motonori wrote:
> > 2009/5/15 Corinna Vinschen <corinna-cygwin@cygwin.com>:
> > > Here's one problem.  What if an application uses setenv("LANG", ...)?
> > 
> > Oh. Hmmm, I think that anything should not occur.
> > 
> > > Do you want Cygwin to intercept all calls to setenv() to check for
> > > setting $LC_ALL/LC_CTYPE/LANG?
> > 
> > No. I think that only setlocale() has to do the check.
> > The reason:
> > - setlocale(LC_CTYPE, "C") is called from Cygwin startup.
> > - The following code become valid.
> > setenv("LANG", "...");
> > setlocale(LC_ALL, "");
> 
> Ok, that makes sense.  I'm just testing a patch which use the
> environment settings internally as you proposed (still keeping UTF-8 the
> default for the "C" locale).  So far it works fine, I have just trouble
> with SJIS, but that's not something I can easily test.  I'm simply
> lacking a real understanding of the SJIS encoding.  Maybe you can look
> into that in the next couple of days?  I'll be mostly offline next week
> and the week after so there's a lot time for testing ;-)

I applied the patch.  The charset used by Cygwin now only depends on the
last call to setlocale in an application and eventually on the setting
of the internationalization environment variables LC_ALL/LC_CTYPE/LANG.

A side effect of this change is that the console charset depends solely
on the environment setting again.  So you can change the console charset
used in an application on the fly again by changing the LC_ALL/LC_CTYPE/LANG
setting in the environment(*), instead of setting it only once at startup
of the first Cygwin process in the console.

The (in)famous "ssh to a remote machine from a UTF-8 console doesn't
work" problem(**) should be unaffected by this change and still work
now, if, for instance, LANG is set to "en_US.UTF-8" in the calling
shell.

Just the documentation needs to be updated again.

I really hope this change makes it finally easier to use Cygwin with
native characters.  I'll create a new Cygwin package tomorrow.


Corinna


(*) Still depends on a call to setlocale, but the Cygwin shells do that
anyway.
(**) http://cygwin.com/ml/cygwin/2009-04/msg00055.html

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list