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