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

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

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=
建议你perl里面用Encode的encode/decode转成unicode..

另外你用perl显示在console吗?如果是的话..用Encode转码成C...
如果是WEB的话..试着改Browser的Encode成 utf-8...
不在console和web上显示,后台处理,我都是用plsql developer查询,原来表里的数据可以正常显示,新写的就是乱码。
编码被改过了..用Encode把他转成utf-8
还是没有搞定, 读取的时候用需要解码吗?我是吧数据库内容读到变量,再把变量写到数据库。来源和目标都在同一个实例,读的时候要decode的吗?写的时候需要encode吗?
既然都在一个实例,为啥还要将数据经过 Perl?
直接 insert ......... select .... from ...... where ..... 不就完了嘛。
楼上说的有理,不过是要拿出了别的数据比较,有差异的才写到另一个表里。
以下是我以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回存回去...

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

encode("utf8",decode("ISO_8859_1",$var)) 这样还不行,而且各种编码试过了很多了