服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

jboss中文乱码问题解决方案

在从weblogic系统迁移到jboss系统的时候,中文存储到数据库和xml文件出现乱码。

  我使用的是jboss3.0.8jetty版。

  这是由于jboss中传递变量默认的iso-8859-1的西文字符集。

  我的解决办法是直接修改org.mortbay.jetty.jar。这样不用在程序中写很多转换过程。



  首先到http://sourceforge.net/project/showfiles.php?group_id=7322,凡是叫 xxxx-src.tar.gz 的,都是源代码。我下载的是jetty-4.2.20rc0-all。

  在../jboss-3.0.8/server/default/deploy/jbossweb.sar目录下,需要修改org.mortbay.jetty.jar中的orgmortbayhttp下的httprequest.java

  下面是代码修改部分:

private void extractparameters()
{
if (_paramsextracted)
return;
_paramsextracted=true;
if (_parameters==null)
_parameters=new multimap(16);

// handle query string
string encoding=getcharacterencoding();
if (encoding==null)
{
// no encoding, so use the existing characters.
//anita modify
//encoding=stringutil.__iso_8859_1;
encoding=stringutil.__gbk;
_uri.putparametersto(_parameters);
}
else
{
// an encoding has been set, so reencode query string.
string query=_uri.getquery();
if (query!=null)
{
try
{
//anita modify
//byte[]qbytes=query.getbytes(stringutil.__iso_8859_1);
byte[]qbytes=query.getbytes(stringutil.__gbk);
urlencoded.decodeto(qbytes,0,qbytes.length,_parameters,encoding);
}
catch(exception e)
{
_uri.putparametersto(_parameters);
}
}
}

  在注释了“//anita modify”的部分下,是关键的替换部分。

  现在才做了一小部分工作哦,还要继续。在stringutil下并没有__gbk方法,那我们就添加自己需要的这段代码。

  到orgmortbayutil下,打开stringutil.java

  我们需要做的是在源程序中添加如下代码:

//anita add for gbk
public static string __gbk;
static
{
string gbk=system.getproperty("gbk");
if (gbk!=null)
__gbk=gbk;
else
{
try{
new string(new byte[]{(byte)20},"gbk");
__gbk="gbk";
}
catch(java.io.unsupportedencodingexception e)
{
__gbk="gbk";
}
}
}

  修改完,使用ant来执行编译打包,并替换掉jboss自带的org.mortbay.jetty.jar。

  这样,中文存储问题就解决了。如果某位老大非要在地址中使用中文url怎么办?让我继续……
到orgmortbayutil下,打开uri.java找到大约200行。

public void seturi(string uri)
{
………………
………………
// complete last state
switch(state)
{
case 1:
………………
case 2:
………………
case 3:
_dirty=(mark==maxi);
_encodedpath=uri.substring(mark);
_path = java.net.urldecoder.decode(_encodedpath, "utf8");
// 我用上面这句替换了下面这句,就可以了 :)
//_path=decodepath(_encodedpath);
break;
case 4:
………………
case 5:
………………
}
}

  同样编译打包,替换org.mortbay.jetty.jar。

  这样如果你的路径中出现中文字符也可以顺利解决了。

  上述解决方法在win2000和redhat linux上均运行成功。

  别忘了,linux上要设置你的字符集。

  locate一下,如果还不是gbk字符集,那需要:

export lang=zh_cn.gbk
export lc_all=zh_cn.gbk

扫描关注微信公众号