Seite 1 von 1

cx_Oracle und deutsche Umlaute

Verfasst: Sonntag 19. März 2023, 11:22
von drnicolas

Code: Alles auswählen

import cx_Oracle
import config
import os


os.environ['NLS_LANG'] ='GERMAN_GERMANY.WE8ISO8859P1'

connection = None

cx_Oracle.init_oracle_client(lib_dir='/opt/oracle/instantclient_21_9')
try:
    connection = cx_Oracle.connect(
        config.username,
        config.password,
        config.dsn,
        encoding=config.encoding)

    # show the version of the Oracle Database
    print(connection.version)
Mit diesem Code greife ich auf eine Oracle DB zu.

SELECT frunktioniert an sich, aber die deutschen Umlaute in Namen sind verkorkst.

encoding ist momentan UTF-8.

Ich finde leider keine Tabelle für den encoding Paramter wie cih damit auf die deutschen Umlaute komme.

Kann mir jemand helfen?

Das Ganze soll unter LINUX/Debian stattfinden

Re: cx_Oracle und deutsche Umlaute

Verfasst: Sonntag 19. März 2023, 11:38
von sparrow
Ich nehme an, das Encoding sollte das Encoding der Datenbank sein.

Re: cx_Oracle und deutsche Umlaute

Verfasst: Sonntag 19. März 2023, 11:39
von Sirius3
Es macht eigentlich keinen Sinn, irgendetwas anderes als UTF8 zu benutzen:

Code: Alles auswählen

os.environ['NLS_LANG'] ='GERMAN_GERMANY.UTF8'
@sparrow: nein, die Datenbank konvertiert automatisch von ihrer internen Repräsentation zum Client-Encoding.

Re: cx_Oracle und deutsche Umlaute

Verfasst: Dienstag 21. März 2023, 13:44
von drnicolas
Ich habe jetzt mal die Datenbank selber abgefragt:
Ich bekomme W8MSWIN1252

Ich habe inzwischen wild alle möglichen Einstellungen für encoding probiert: Es kommt immer Blödsinn, aber durchaus unterschiedlicher Blödsinn

Re: cx_Oracle und deutsche Umlaute

Verfasst: Dienstag 21. März 2023, 13:44
von drnicolas
Updated: Interessanterweise kommen die Umlaute selbst in SQL Developer falsch wenn ich die Tabelle direkt anschaue

Re: cx_Oracle und deutsche Umlaute

Verfasst: Dienstag 21. März 2023, 14:43
von Sirius3
Dann kann es ja sein, dass bereits beim Schreiben Blödsinn in die Datenbank geschrieben worden ist.
In den Oracle-Tabellen sollte man nur Unicode-Zeichensätze verwenden. Und für den Client sollte man auch immer UTF8 angeben.
Also am besten die Datenbank neu aufsetzen und von vornherein richtig befüllen.

Re: cx_Oracle und deutsche Umlaute

Verfasst: Mittwoch 22. März 2023, 10:15
von drnicolas
Die DB ist von einem Drittanbieter und mit den zugehörigen Clients kommen die Umlaute auch richtig raus. Dort sind die Umlaute mit Sicherheit richtig.

Mit UTF-8 encoding hat es nicht funktioniert

Re: cx_Oracle und deutsche Umlaute

Verfasst: Mittwoch 22. März 2023, 10:31
von Sirius3
Nagut, wenn der Drittanbieter falsche Zeichen in die Datenbank schreibt, und die dann selbst wieder beim Lesen falsch interpretiert, dann liegt die Schuld eindeutig bei diesem Drittanbieter.
Kannst Du mal ein paar falsche Umlaute hier posten?

Re: cx_Oracle und deutsche Umlaute

Verfasst: Sonntag 2. April 2023, 15:13
von drnicolas
Glaube ich eher nicht.
In der zugehörigen Front-end-Software passt es ja.

Ich denke, das Problem liegt auf meiner Seite.

Re: cx_Oracle und deutsche Umlaute

Verfasst: Sonntag 2. April 2023, 15:31
von __blackjack__
@drnicolas: Naja, wenn die das konsequent falsch macht, dann passt das dort ja. Das kann trotzdem falsch in der DB stehen.