事情是这个 样子的,首先从数据库中取出一些数据,然后经过简单的处理在将这些数据入库,但是在数据在数据库中呈现为乱码。
在控制台输出为正常,日志里也为正常,但是在数据库中就为乱码。
(最为神奇的是在前期的调试过程中数据是可以正常显示的。)
以下为处理步骤:
1、怀疑是编码的问题,按照网上一般的说法是因为入库的编码和数据库中的编码不一致造成的。
数据库中的编码为:select userenv('language') from dualSIMPLIFIED CHINESE_CHINA.ZHS16GBK当前的客户端为的环境为:env|grep LANGLANG=zhNLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK无论是这个还是设置为:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280都不行
2、编码尝试过程
数据库乱码为:脧脗脨脨脳陇虏篓赂忙戮炉从数据库中手工取出乱码,经过PERL 处理过程为:将执行的SQL写入文本打开也可以正常显示。my $str="脧脗脨脨脳陇虏篓赂忙戮炉";print decode("utf8",$str)," ";结果显示正常
3、推论
由于数据库中的编码为gbk,而perl中默认的处理环境为:utf8,个人认为应该是这个问题...但是经过encode("gbk")
decode("gbk")encode("gbk", decode("utf8"))encode("utf8",decode("gbk"))
等方法均不能解决4、将执行环境设为gbk use encoding "gbk";
解决了入库的乱码问题,但是对这个解决方法不是很满意。
脧脗脨脨脳陇虏篓赂忙戮炉bk