请查一下系统设置的 locale 是什么,请把LANG设置为 zh_CN.gbk,
同时你还可以在启动文件中加入-Dfile.encoding=GBK, 例如在setDomainEnv.sh中修改JAVA_OPTIONS为:
JAVA_OPTIONS="${JAVA_OPTIONS} -Dfile.encoding=GBK"
export JAVA_OPTIONS
如果您使用的是GB18030字库,请试一下以下参数:
-Dfile.encoding=GB18030
另外,如果您是从数据库读出的数据,请保证从数据库读出的就是正确字符。
这是常见的处理“中文乱码”的解决方式。
IBM----GB18030 已经包含了GBK 请看看以下文档
http://www-900.ibm.com/cn/support/viewdoc/detail?DocId=1811997D29000
http://www-900.ibm.com/cn/support/viewdoc/detail?DocId=2811995H31000
WEBLOGIC相关的中文问题
----------------------------------------------
1. JSP文件中的中文提示信息不能正确显示。
最直接的原因是WebLogic的默认字符集不是中文字符集(Weblogic8.1里是setlocal,Weblogic7.0sp3,sp4为UTF-8),
因此可以在JSP页面中设置字符集,加入如下脚本:
<%@ page contentType=“text/html; charset=GBK“ %>
这种做法需要对每个JSP页面进行设置。
----------------------------------------------
2. JSP文件中包含中文提示信息时,不能正确编译
解决方法是在weblogic.xml文件的<jsp-descriptor>部分加入
<jsp-descriptor>
<jsp-param>
<param-name>compilerSupportsEncoding</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</jsp-param>
</jsp-descriptor>
----------------------------------------------
3. 在JSP文件之间传递中文时,如果不能正确传递中文数据
方法(1) 可在web.xml文件中加入
<context-param>
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>GBK</param-value>
</context-param>
方法(2) 在weblogic.xml里加上如下脚本:
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>GBK</java-charset-name>
</input-charset>
</charset-params>
方法(3) 当然这种问题也可以自己用java.net.URLEncoder和java.net.URLDecoder来处理中文.
----------------------------------------------
4. 从数据库中检索出来的中文显示不正确。首先查询数据库:
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
得到数据库的字符集, 如果ZHS16GBK, 则JDBC的操作不需要转码;
如果是us7ascii, 则需要转码或者作相关配置.
下面以使用不同的数据库驱动程序为例来介绍.
a. 如果数据库使用的是中文字符集,而且使用的是WebLogic提供的TYPE2 driver (OCI driver),
在配置连接池时设置Properties属性:
weblogic.codeset=GBK
b. 如果使用Thin Driver, 那么需要在查询数据库的时候将字符集由ISO转换为GBK,
写入数据库的时候将字符集由GBK转换为ISO.
举个例子:
插入一条记录:
Connection conn=null;
PreparedStatement pstmt = null;
try {
String strSql="insert into tabA(A,B) values('1111','王超')";
conn=ds.getConnection();
strSql = new String(strSql.getBytes("GBK"), "ISO-8859-1");
pstmt = conn.prepareStatement(strSql);
pstmt.executeUpdate();
}
catch (Exception e) {
//logger.error(e, e);
}
finally {
disconn(conn, pstmt);
}
查询一条记录:
Connection conn=null;
PreparedStatement pstmt = null;
ResultSet rs=null;
try {
String strSql="select B from tabA where A='1111'";
conn=ds.getConnection();
strSql = new String(strSql.getBytes("GBK"), "ISO-8859-1");
pstmt = conn.prepareStatement(strSql);
rs=pstmt.executeQuery();
String strB;
if (rs.next()){
strB=new String(rs.getString(1).getBytes("ISO-8859-1"), "GBK");
}
catch (Exception e) {
//logger.error(e, e);
}
finally {
disconn(conn, pstmt, rs);
}
建议在属性文件里设置oracle字符集, 根据字符集判断是否转码, 以增加应用的移植性.
----------------------------------------------
5. 静态页面中文信息不能正确显示。
浏览器端看到中文不能正确显示,首先应该检查浏览器是否支持中文,浏览器的编码是否设置正确。
为保证静态页面中文信息正确显示可以在HTML <HEAD> 部分增加:
<meta http-equiv="Content-Type" content="text/html" charset="GBK">
----------------------------------------------
6. 文件名和目录中的中文问题
如果你的文件名或者目录是中文的,这时需要使用java.net.URLEncoder编码.
举例, 在test.jsp里, 你需要提供一个超链接到 ./测试/测试.jsp, 你可以这么写:
<p><a href="<%=java.net.URLEncoder.encode("./测试/测试.jsp")%>">go</p>