免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2427 | 回复: 8
打印 上一主题 下一主题

perl在solaris上从oracle的一个表读记录写到另一个表,结果成了乱码,谁能帮帮我? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-20 11:16 |只看该作者 |倒序浏览
Oracle安装在solaris上,perl也在同一个机器上运行
Oracle的字符集是utf-8

solaris的本地环境为:
bash-3.00$ locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-05-20 11:26 |只看该作者
建议你perl里面用Encode的encode/decode转成unicode..

另外你用perl显示在console吗?如果是的话..用Encode转码成C...
如果是WEB的话..试着改Browser的Encode成 utf-8...

论坛徽章:
0
3 [报告]
发表于 2008-05-20 11:29 |只看该作者
不在console和web上显示,后台处理,我都是用plsql developer查询,原来表里的数据可以正常显示,新写的就是乱码。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-05-20 11:37 |只看该作者
编码被改过了..用Encode把他转成utf-8

论坛徽章:
0
5 [报告]
发表于 2008-05-20 14:10 |只看该作者
还是没有搞定, 读取的时候用需要解码吗?我是吧数据库内容读到变量,再把变量写到数据库。来源和目标都在同一个实例,读的时候要decode的吗?写的时候需要encode吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-05-20 14:16 |只看该作者
既然都在一个实例,为啥还要将数据经过 Perl?
直接 insert ......... select .... from ...... where ..... 不就完了嘛。

论坛徽章:
0
7 [报告]
发表于 2008-05-20 14:22 |只看该作者
楼上说的有理,不过是要拿出了别的数据比较,有差异的才写到另一个表里。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2008-05-20 20:53 |只看该作者
以下是我以Informix 的角度来猜为甚麽?..oracle也许不一样...

连线Informix 数据库的时候一般都会指定CLIENT_LOCALE ,与DB_LOCALE..环境变量..
有时候会看LANG是什麽, 决定要用什麽编码取数据...正常都会指定..(你查一下ORACLE的书, 应该有类似的设定)

我看你的LANG=C 而不是用UTF-8编码..
所以Perl会告诉Informix , Client端的编码是ISO_8859_1,
所以取出的数据编码 会变成ISO_8859_1 编码..
再存回去...就会以SERVER_LOCALE存进去..不指定的话..会变成 iso_8859_1回存回去...

也许只要增加几个环境变量..就能解决..

[ 本帖最后由 apile 于 2008-5-20 20:54 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-05-21 12:09 |只看该作者
encode("utf8",decode("ISO_8859_1",$var)) 这样还不行,而且各种编码试过了很多了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP