我的企业应用在windows2003SRV(简体中文)+oracle10g+tomcat5.5+JDK1.5下运行正常
1.应用错误现象:
读出oracle10g 中的clob字段内容后.输出字节流>>Reader >>样式解析>>字符串转换为UTF-8>>结果为乱码(不是?之类的,也是方块字哦)
2.原因分析:
在其它配置都相同的情况下(oracle10g+tomcat5.5+JDK1.5),只有window与linux的区别,分析可能是JRE的运行环境使用了操作系统的配置参数.
oracle10g
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
ZHS16GBK
tomcat5.5
--linux版与windows版都是在apache官网上下载的.
JDK1.5
--linux版与windows版都是在sun官网上下载的.
windows (简体中文)
linux enterprise 5 (选择简体中文安装)
但经过查看linux的配置文件:
vi /etc/sysconfig/i18n
内容为:
LANG=zh_CN.UTF-8
出现的乱码是因为JVM与在读取IO流后输出为字符时使用了底层操作系统的字符集(linux的UTF-8)定义,进行了一次转换.
3.解决方法:
保证oracle数据库的字符集
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
值为:ZHS16GBK
4.修改tomcat的启动脚本
在startup.sh脚本的最上端加入一行 export LANG=zh_CN.GBK
例子如下:
#!/bin/sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
#
# $Id: startup.sh 385888 2006-03-14 21:04:40Z keith $
# -----------------------------------------------------------------------------
# Better OS/400 detection: see Bugzilla 31132
export LANG=zh_CN.GBK
(说时:这里的export你可以放在/etc/profile文件中作为系统的公共配置项也行)
5.重新启动tomcat即可