[python] upper a lower

mtip mtip na atlas.cz
Středa Leden 28 13:52:45 CET 2009


PK> Jinak funguje toto:

PK> # -*- coding: cp1250 -*-

PK> import locale
PK> # print locale.setlocale(locale.LC_ALL, 'Czech_Czech Republic.1250')
PK> print u'ž', u'ž'.upper()

PK> i toto:

PK> # -*- coding: cp1250 -*-

PK> import locale
PK> print locale.setlocale(locale.LC_ALL, 'Czech_Czech Republic.1250')
PK> print u'ž'.encode("cp1250"), u'ž'.upper().encode("cp1250")

PK> Asi ne všude (myslím Linux), ale na win jo.



 Po ještě delším zkoumání jsem dočel k tomuto závěru:
---------------------------------------------------------------------------
# -*- coding: cp1250 -*-

import locale, re
print locale.setlocale(locale.LC_ALL, '')

print 'ž', 'ž'.upper()
print u'ž'.encode('cp1250'), u'ž'.upper().encode('cp1250')
print 'ž', unicode('ž','cp1250').upper().encode('cp1250')
print u'ž'==u'Ž'.lower()

if re.search(u'ž', u'Ž',re.IGNORECASE):
    print 'stejne'
else:
    print 'ruzne'

if re.search(u'ž'.encode('cp1250'), u'Ž'.encode('cp1250'),re.IGNORECASE):
    print 'stejne'
else:
    print 'ruzne'
---------------------------------------------------------------------------
'ž'.upper()  - nefunguje nikdy - bez ani při nastaveném locale
u'ž'.upper() - funguje vždycky nehledě na locale
re.search s IGNORECASE - nefunguje nikdy - locale nelocale

Prostě podpora národních znaků a unicode, jak má být :-).
Možná je tomu na linuxu jinak.


-- 
Mirek N.



Další informace o konferenci Python