Seite 1 von 1

Python, Interbase und Unicode

Verfasst: Freitag 2. April 2004, 12:20
von querdenker
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

Verfasst: Freitag 2. April 2004, 12:55
von Dookie

Verfasst: Freitag 2. April 2004, 13:42
von querdenker
danke, hat geholfen!

mfg, querdenker

Verfasst: Freitag 2. April 2004, 16:02
von hans
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

Verfasst: Freitag 2. April 2004, 18:16
von querdenker
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