Kdysi jsem tady psal o problémech s pymssql.
Nyní nastalo další dějství tohoto 'dramatu' :-)

Připomenu že se mi to na mojem PC chovalo tak, že ať jsem uvedl či neuvedl charset v pymssql.connect, vracela se mi char hodnota v kódování 'cp852'. Pokud jsem uvedl charset='cp1250' vracela se v typu unicode, ale nesmyslném v kódování 'cp852'.

Použil jsem dotyčný python program na stroji a hle, všechno je jinak a funguje jak má: pokud se v pymssql.connect nastaví charset='cp1250', char hodnoty jsou typu unicode a kódování je v pořádku.
Pokud se charset neuvede jsou char hodnoty typu str a v kódováni 'cp1250'.

Provedl jsem testy na jiných dvou PC s W-XP. Na jednom v pořádku na druhém 'cp852'.
Porovnal jsem seznam použitých dll a jejich verze: žádný rozdíl.

Napadá mne jediný závěr: prostě windows :-(

Ale nepovažuji se za žádného guru, tak třeba vás něco napadne.

Řešením asi bude "select CHAR(154)", otestovat co vlastně přišlo a zachovat se podle toho:

if ord(TXT[0]) == 231:
        print "cp852"

elif ord(TXT[0]) == 154:
        print "cp1250"

elif ord(TXT[0]) == 353:
        print "unicode"


ZU

Dne 8.9.2009 21:34, zu1234 napsal(a):
Chlapi,
děkuji za reakce a kód-y !
Ale prostě mne zarazily dvě věci: jednak proč cp852 a jednak proč to
nemohu změnit když fce pymssql.connect na to má dokonce parametr charset.
Ale zatím to funguje a já holt nemusím fšemu rozumět :-)))
ZU


Jan Bednařík napsal(a):
Sorry, četl jsem tam MY-SQL ;-)

Pokud máš skript v UTF-8, pak stačí na stringy z MS SQL použít
unicode(), asi takto:

def unicode_string(s, enc):
return unicode(s, enc) if type(s) == type("") else s

def unicode_tuple(t, enc):
return tuple([unicode_string(i, enc) for i in t])

...
for row in cursor.fetchall():
row = unicode_tuple(row, "windows-1250")
...

Honza
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem