[cx-oracle-users] strange character encoding problems
Brought to you by:
atuining
From: Marcus E. <eg...@di...> - 2006-01-30 00:27:20
|
I am not able to store characters of the latin-1 charset in my oracle-database. I've encoded them according to NLS_CHARACTERSET but that doesn't help. I'm running Oracle 10g XE, Python 2.4.1 and cx_Oracle 4.1 Here is some sample code which shows the very strange results: #!/usr/bin/python # -*- coding: iso-8859-1 -*- import cx_Oracle db = cx_Oracle.connect('TESTUSER/TESTPASSWORD@localhost') c = db.cursor() query = unicode("SELECT 'äöü' FROM dual", 'iso-8859-1') charsets = ['iso-8859-1', 'cp1252', 'utf-8', 'utf-16'] c.execute('SELECT * FROM V$NLS_PARAMETERS') for row in c: print row for charset in charsets: try: c.execute(query.encode(charset)) except cx_Oracle.Error, err: print err else: print charset, c.fetchone()[0] c.close() db.close() ======================================================= OUTPUT: python charsettest.py ('NLS_LANGUAGE', 'AMERICAN') ('NLS_TERRITORY', 'AMERICA') ('NLS_CURRENCY', '$') ('NLS_ISO_CURRENCY', 'AMERICA') ('NLS_NUMERIC_CHARACTERS', '.,') ('NLS_CALENDAR', 'GREGORIAN') ('NLS_DATE_FORMAT', 'DD-MON-RR') ('NLS_DATE_LANGUAGE', 'AMERICAN') ('NLS_CHARACTERSET', 'WE8MSWIN1252') ('NLS_SORT', 'BINARY') ('NLS_TIME_FORMAT', 'HH.MI.SSXFF AM') ('NLS_TIMESTAMP_FORMAT', 'DD-MON-RR HH.MI.SSXFF AM') ('NLS_TIME_TZ_FORMAT', 'HH.MI.SSXFF AM TZR') ('NLS_TIMESTAMP_TZ_FORMAT', 'DD-MON-RR HH.MI.SSXFF AM TZR') ('NLS_DUAL_CURRENCY', '$') ('NLS_NCHAR_CHARACTERSET', 'AL16UTF16') ('NLS_COMP', 'BINARY') ('NLS_LENGTH_SEMANTICS', 'BYTE') ('NLS_NCHAR_CONV_EXCP', 'FALSE') iso-8859-1 ??? cp1252 ??? utf-8 ?????? ORA-00911: invalid character As you can see either encoding returns only questionmarks. Any thoughts about this? |