为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:Windows11
【CPU】: x86
【问题描述】*:
用一段Python代码,使用oracledb读取Oracle数据源,使用dmpython写入达梦,这段代码成功处理了上千张表。
try:
cursor.executemany(insert_sql, dm_data)
cursor.execute("commit")
except Exception as errorMsg:
msg = str(errorMsg)
print(dm_data)
print(msg)
但是在处理其中一张表的时候发生了错误’gbk’ codec can’t encode character ‘\xe4’ in position 3: illegal multibyte sequence。经过反复检查各种和字符集有关的设置,都无法接近问题,于是怀疑同数据内容有关系。因此通过筛选条件,分批从原始表中读取数据,最终发现是其中一条含有的德语的数据所致。
[['HD001', 'KS7', datetime.datetime(1990, 1, 1, 0, 0), 'A', 'Anwäter/in', 'Anwäter/in', ' ', ' ', ' ', ' ', 0, '8', 0, ' ', ' ', 0.0, 0.0, 'USD', 42.0, 'W', 'M', ' ', ' ', 0, 0, 0, 0, 0.0, 0.0, 0.0, ' ', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ' ', ' ', 'N', ' ', 'N', ' ', ' ', 'N', ' ', '2', ' ', ' ', ' ', 'N', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'GBI', '00', ' ', ' ', ' ', ' ', 'PA', ' ', ' ', ' ', ' ', ' ', '1', 'N', 'N', 'N', ' ', ' ', ' ', datetime.datetime(2011, 6, 10, 0, 0), ' ', ' ', ' ', ' ', ' ', 'R', 'A', ' ', 'N', 'N', 'Y', ' ', ' ', ' ', 'N', 'STP', 0.0, ' ', ' ', ' ', ' ', ' ', ' ', 0.0, 0, ' ', 0.0, ' ', ' ', ' ', ' ', ' ', 'N', ' ', ' ', ' ', 'Y', ' ', 'CO', ' ', datetime.datetime(2011, 6, 10, 0, 0), ' ', 0.0, 0.0, 0.0, ' ', ' ', ' ', ' ', ' ', 'PS', datetime.datetime(2011, 9, 19, 8, 46, 48), 'N', None]]
'gbk' codec can't encode character '\xe4' in position 3: illegal multibyte sequence
请问这种错误该怎么处理?
官方文档应该说清楚一点,local_code参数的作用写的相当不清不楚,害我研究了一整体字符串转码,才怀疑到数据库上来。