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?
|