Portable locale usage
ssegvic
sinisa.segvic at fer.hr
Tue Sep 6 10:46:46 EDT 2011
On 6 ruj, 13:16, Thomas Jollans <t... at jollybox.de> wrote:
> > locale.setlocale(locale.LC_ALL, (myISOCountryCode,
> > locale.getpreferredencoding()))
>
> As far as I can tell, this does work. Can you show us a traceback?
Sorry, I was imprecise.
I wanted to say that the above snippet
does not work both on Windows and Linux.
This is what I get on Windows:
>>> import sys
>>> sys.version
'3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)]'
>>> myISOCountryCode='hr'
>>> locale.setlocale(locale.LC_ALL, (myISOCountryCode, locale.getpreferredencoding()))
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
locale.setlocale(locale.LC_ALL, (myISOCountryCode,
locale.getpreferredencoding()))
File "C:\apps\Python32\lib\locale.py", line 538, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
The snippet actually works on Linux, as you note.
> It looks like you don't actually care about the encoding: in your first
> example, you use the default system encoding, which you do not control,
> and in your second example, you're using two different encodings on the
> two platforms.
That's true.
That's because currently I care most about
lists of strings being sorted properly (see below).
Nevertheless, it *appears* to me that, in the Unicode era,
the locales could well be decoupled from particular encodings.
But this is another topic.
> So why do you care whether or not the default uses ISO 8859-2 ?
It's not that I care about encoding,
it's that Windows throws locale.Error at me :-)
> > My questions are the following:
>
> > 1. Is there a way for writing portable Python code dealing with
> > locales
> > (as sketched in the beginning)?
>
> > 2. If not, is there anything wrong with that idea?
>
> As I said, I believe the above code should work. It works on my Linux
> system.
>
> What are you attempting to achieve with this setting of the locale,
> without even setting the encoding? Doesn't it make more sense to simply
> use the user's usual locale, and interact with them on their own terms?
For the moment, I only wish to properly sort a Croatian text file
both on Windows and Linux (I am a cautious guy, I like reachable
goals).
When the locale is properly set, sorting works like a charm
with mylist.sort(key=locale.strxfrm).
My current solution to the portability problem is:
import locale
try:
locale.setlocale(locale.LC_ALL, 'hr_HR.utf8') # linux
except locale.Error:
locale.setlocale(locale.LC_ALL, 'Croatian_Croatia.1250') #
windows
Thanks for your feedback!
Sinisa
More information about the Python-list
mailing list