Python, Interbase und Unicode

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Ich hab da mal ein Problem:

Eine Anwendung liest aus einem Active-Directory die Benutzergruppen und die Benutzer aus. Diese Daten sollen in eine Interbase-DB geschrieben werden.

Das Problem tritt an der DB-Schnittstelle auf, sobald Umlaute in dem Gruppennamen oder im Benutzernamen sind.

Python : ActivePython 2.3.3
win32all: build 200
kinterbasdb 3.1 pre 7

bekomme folgenden Fehler :
512 Domänen-Admins
Traceback (most recent call last):
File "C:\devel\test\unitest.py", line 14, in ?
cur.execute(stm)
File "C:\Python23\Lib\site-packages\kinterbasdb\__init__.py", line 1553, in execute
self.description = _k.execute(self._C_cursor, sql, params)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 54: ordinal not in range(128)

hat jemand 'ne idee??

mfg, querdenker
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

danke, hat geholfen!

mfg, querdenker
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Hi Querdenker,

wie hast du denn deine Tabellen definiert? Bei mir sieht das so aus

Code: Alles auswählen

SQL> show table country;
COUNTRY_NO                      SMALLINT Nullable
COUNTRY_ISO_CODE                CHAR(3) Nullable
COUNTRY_ADR                     VARCHAR(3) Nullable
COUNTRY_SUPRESS_ZERO            SMALLINT Nullable DEFAULT 0
COUNTRY_NAME                    VARCHAR(30) CHARACTER SET ISO8859_1 Nullable
CONSTRAINT INTEG_41:
  CHECK (COUNTRY_SUPRESS_ZERO BETWEEN 0 AND 1)
SQL>
DB: FireBird 1.5RC8
OS: Fedora Core 1

Hans
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Hi Hans,

Die char / varchars sind alle WIN1252.

DB : Interbase 6.5 <= :wink: ja, das geht mit dem Kinterbasdb!

:twisted: hab das defaultencoding umgestellt, da die Anwenoung bei uns in der Serverfarm auf einem einzigen Rechner läuft und daher nicht weitergegeben wird!

Code: Alles auswählen

for item in my_groups:
    group=item.get('name').encode("latin-1")
    print item.get('group_id'),
    stm="select bueroname from t_ctx_buero where bueroname='"+lower(group)+"'"
    cur.execute(stm)
    data=cur.fetchone() 
    if data is None:
        print "\n"
    else:
        ngroup= data[0]
        print ngroup
    users=unifunc.get_users(server,ngroup)
das war der test, ausgabe in der Console ist relativ egal, da die Daten nachher über ein Frontend wieder weiterverarbeitet werden.
Für mich war wichtig, das die PyUnicode-Strings aus win32net weitergereicht werden können.

MfG, querdenker
Antworten