cx_Oracle 字符集和python编码问题

问题:

使用cx_Oracle查询数据,包含中文
大多数数据没有问题
某一条数据会报UnicodeDecodeError的错
数据库采用字符集SIMPLIFIED CHINESE_CHINA.ZHS16GBK

解决办法:

首先import os然后os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

如果有耐心,下面是我遇到问题到解决问题的过程:

python使用cx_Oracle查询oracle报错UnicodeDecodeError: 'gbk' ……搜索以上内容可以看到很多帖子教你如何查询oracle数据库使用的字符集,然后import os 使用os.environ['NLS_LANG'] = 'SIMPLIFIED ***'指定客户端(也就是python程序所在环境)使用相同的字符集。
但是,我按照这些”教程”操作之后,程序依旧会报UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 27: illegal multibyte sequence的错误。首先是在google上狂搜了一通,但是得到的结果都是让统一字符集之类的。然后,转向几个python交流群提问,但是并没有解决问题。最后我在代码中把出错那条记录的rownum找到,然后使用sqldeveloper查找这条记录,一眼就看到了罪魁祸首piǎn 长条形的低平底这个土扁读作pian,长用作地名。我尝试用python对这个字进行编码,使用'土扁'.encode('gbk')果然报错了,而'土扁'.encode('utf-8')却能正常编码,于是抱着试试看的态度,把原来使用的os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'(数据库使用SIMPLIFIED CHINESE_CHINA.ZHS16GBK字符集)换成了os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF-8',神奇的事情发生了,一口气跑500万的数据也报错了。
但是还有一事不明,既然数据库使用ZHS16GBK编码,为什么这个怪怪的字能存进去呢?求大神指点。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值