怎么加过滤器?
是在当表单提交到ActionForm是就用new String(str.getBytes("Shift_jis"));来重新设置字符集马?这是我都试过的,不行的!
以下是我做的方法,当每次Struts自动将表单内容提交到ActionForm时进行set****()方法是都调用这个方法,可结果还是乱码!
// public String getToString(String str){
// String d=null;
// try {
// d = new String(str.getBytes("Shift-JIS"));
//
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// return d;
// }

解决方案 »

  1.   

    哈哈!!
    已经解决了,我将d = new String(str.getBytes("Shift-JIS"));里的字符集改为iso-8859-1就好了,不过优点困惑,为什么页面的字符集是Shift-JIS而读取时以iso-8859-1字符集进行读取就OK了呢?这些字符集到底是怎么回事啊?谢谢楼上的仁兄
      

  2.   

    在 servlet中用过滤器
    jsp中一般str=new String(str.getBytes("ISO-8859-1"),"GB2312")
    我自己写了一个类
    在操作数据库的时候调用下就自动把bean类中所有String的编码转换了
    呵呵
      

  3.   

    最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。2.1. iso8859-1属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然"中文"两个字不存在iso8859-1编码,以gb2312编码为例,应该是"d6d0 cec4"两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节"e4 b8 ad e6 96 87"。很明显,这种表示方法还需要以另一种编码为基础。2.2. GB2312/GBK这就是汉子的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。2.3. unicode这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字节,比如字母a为"00 61"。需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。2.4. UTF考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。