Perl Oracle 中文乱码的问题

 

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

转载于:https://www.cnblogs.com/wangn/p/3423703.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值