Windows XP - Environment variable - Unicode

Alan Kennedy alanmk at
Fri Jul 11 17:42:42 CEST 2003

"sebastien.hugues" wrote:

> Actually the issue is that this variable is
> set by the system itself. It is not accessible from the control panel.
> In the other hand, i don't use any terminal.
> So the question is how to get the default encoding of the system ?
> I was looking for a while in win32api documentation, msdn and
> Google but i didn't get nothing.

This page from MSDN explains about how locales are handled for
different users.

Quoting: (for the archives, since MS are guaranteed to make the above
link break sometime)

The System Default Locale

The system default locale acts as an ANSI simulation layer. It
determines the ANSI code page that the system uses when running a
non-Unicode application. For example, if the system default locale is
Japanese, then to a non-Unicode application the operating system will
behave similarly to a Japanese operating system, fully able to support
non-Unicode Japanese applications, but unable to support
non-Japanese-compatible applications (such as a Korean non-Unicode
app). The operating system uses the Japanese code page 932 when
ANSI-Unicode translation is needed. So, the system default locale
determines whether or not your non-Unicode application will run.

The system default locale is set at installation, but can be changed
in the Control Panel. To get the current system default locale, call
the GetSystemDefaultLCID function.

The User Locale and the Thread Locale 

The user locale and the thread locale determine which settings are
used for formatting dates, times, currency, and large numbers as a
default for each user. The user locale and the thread locale also
determine the sort order for sorting text. The thread locale can be
set separately for each thread. When the thread locale and the user
locale are different, the thread locale overrides the user locale.
For example, even though your app is English and the system default
locale is English, as long as the user locale is Spanish (and you did
not set the thread locale specifically), your strings will be sorted
by the Spanish sorting order. If you need your app's numbers,
currency, or sorting to be done in a certain locale, make sure that
you set the thread locale explicitly by calling the SetThreadLocale
When each thread starts, the thread locale defaults to the user
locale. The user locale defaults to the locale that matches the
language of the localized system. To get the user locale, call the
GetUserDefaultLCID function. Call the GetThreadLocale function to get
the calling thread locale.

I'm not sure if the env var you're looking at is set in the system or
user default locale, so probably best to try both:-

systemdefaultlcid = win32api.GetSystemDefaultLCID()
userdefaultlcid = win32api.GetUserDefaultLCID()

Now, as for how to turn an LCID into a character set name, I don't
know the answer to that one :-(

Here's a q&d hack for getting the user default character set, through
an internet explorer COM object. 

from win32com.client import Dispatch
htmldoc = Dispatch("htmlfile")
htmldoc.writeln("<h1>any old stuff</h1>")
print htmldoc.defaultCharset


alan kennedy
check http headers here:
email alan:    

More information about the Python-list mailing list