0
免責聲明解碼字節0×81:我有編碼的鬥爭。SQLAlchemy的編解碼器無法與Oracle WE8ISO8859P1編碼
我使用SQLAlchemy的拉從Oracle 12數據庫中的某些數據與WE8ISO8859P1字符集(根據NLS_CHARACTERSET)
某處有在數據庫中(假設一個人的名字)的值當值傳遞給Python時,它會引發錯誤。
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 4: character maps to <undefined>
代碼是:
Base = declarative_base()
class Person(Base):
__tablename__= 'PERSON'
id = Column(Integer,primary_key=True)
lastname = Column(String)
firstname = Column(String)
middlename = Column(String)
active = Column(Integer)
sex = Column(String)
dateofbirth = Column(String)
engine = create_engine('oracle://USER:[email protected]:1521/ORCL', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
testList = []
for user in session.query(Person).all():
testList.append(user)
檢查在Oracle V $ session_connect_info我看到,運行該代碼的客戶端與字符連接設置WE8MSWIN1252
我知道Python中使用Unicode,所以它看起來像我有3種不匹配的編碼,我真的不知道從哪裏開始。
我應該......
- 嘗試更改Oracle客戶端上的編碼(Windows機器,但我看到UTF-8與其他Windows客戶端)
- 嘗試更改編碼
create_engine
腳本? (我試圖通過encoding='WE8ISO8859P1'
,並沒有接受 - 嘗試捕獲錯誤並將值更改爲其他
獎金:?究竟是什麼0×81也許這甚至不應該在一個人的名字編碼
請註明完整回溯cx_Oracle將自動完成轉換的字符串。 –