[GRASS-dev] fonts and character encoding
Glynn Clements
glynn at gclements.plus.com
Sat May 12 17:08:46 EDT 2007
Michael Barton wrote:
> > So, I think that the GUI should probably set GRASS_FT_ENCODING to the
> > locale's encoding (e.g. from "locale charmap").
>
> You mean instead of having the user set it?
Yes.
AFAICT:
Tcl and Python both use Unicode internally, and automatically convert
to the locale's encoding when calling system functions. So if the user
types a value for e.g. "d.text text=..." into the GUI, the sequence of
bytes which end up in the corresponding argv[] will be in the locale's
encoding.
At least, that's the default. With Tcl, you can change the default
encoding with "encoding system <name>", where <name> is one of the
values returned by "encoding names". Also, when reading/writing
streams (files or pipes), you can change the encoding for that
particular stream with "fconfigure $fh -encoding ...".
But, in general, the GUI should probably stick with the locale's
encoding, as that's what external commands will normally be expecting.
> How do I access locale charmap from TclTk or wxPython?
Tcl:
set encoding [exec locale charmap]
Python:
encoding = Popen(["locale", "charmap"], stdout=PIPE).communicate()[0].strip()
AFAICT, the resulting value will be valid for iconv(), and thus for
$GRASS_FT_ENCODING.
Needless to say, this won't work on Windows. You can get the Windows
codepage by parsing the output from "mode con cp /status", although
there might be better solutions. iconv appears to accept cp??? for
most of the common ones (e.g. cp437 = US, cp850 = western Europe,
etc).
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list