且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

servlet中文乱码方法

更新时间:2022-08-12 22:13:00

1 提交页编码为:GBK

2 servlet获取提交值用gbk解码

String s=new String(request.getParameter("tbxname").getBytes("ISO-8859-1"),"GBK");
 out.println(s);

 

原因请参考(引):

在 servlet引擎实现 request.getParameter("myparam")时,会先在一个缓存里找一下,如果没有,就会开始解析参数并把解析后的参数和其对应的值放入缓存中。而在解析参数时,servlet规范中规定:首先按照 request.getCharacterEncoding获取的编码对解析出来的byte进行编码,创建新的字符串。如果request.getCharacterEncoding 的值是null,则按照ISO-8859-1来进行编码。而现在大多的浏览器在发送数据时都没有发送客户端的数据编码。所以在没有预先设置过的情况下,引擎应该都是按着ISO-8859-1来处理参数的值。

    假如表单的参数实际值是“中国” 那么按着GBK的编码提交到服务器端的myparam的值对应的应是4个byte.假设 解析出来的byte 是paramBytes,那么引擎为我们放入参数缓存中的参数值就是这样的 new String(paramBytes,encoding);很明显本来2个字节参能表达一个汉字 ISO-8859-1来编码之后,每个字节都成了单独的一个字符:4个字节成了四个字符,这就是我们看到的乱码出现的原因。

请参考:ISO-8859-1

http://wiki.ccw.com.cn/ISO_8859-1

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园