cx_Oracle 字符集和python编码问题

版权声明:本文为博主原创文章,欢迎转载,转载时请注明链接。 https://blog.csdn.net/hunter_yang_Tuziki/article/details/77341726

问题:

使用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编码,为什么这个怪怪的字能存进去呢?求大神指点。

猜你喜欢

转载自blog.csdn.net/hunter_yang_Tuziki/article/details/77341726
今日推荐