日期:2014-05-18  浏览次数:20679 次

如何解决servlet中的中文显示问题
在servlet中我设置
response.setContentType( "text/html;charset=gb2312 ");
并且还设置
response.setCharacterEncoding( "GBK ");
request.setCharacterEncoding( "GBK ");

在servlet打印的中文{out.println( "中文 ");}好使
但从全局变量中的接收的中文无法正常显示[out.println([变量名]);]
高手指点一下

------解决方案--------------------
应该不会有问题了吧...
------解决方案--------------------
对于中文的处理最好用过滤器处理,
------解决方案--------------------
gb2312和gbk都是为了显示中文的
你选择一种就好了把你的charset=gb2312删除掉
看看


------解决方案--------------------
(二) 当用Request对象获取客户提交的汉字代码的时候,会出现乱码:解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.UnavailableException; /** * Example filter that sets the character encoding to be used in parsing the * incoming request */ public class SetCharacterEncodingFilter implements Filter { /** * Take this filter out of service. */ public void destroy() { } /** * Select and set (if specified) the character encoding to be used to * interpret request parameters for this request. */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException { request.setCharacterEncoding( "GBK "); // 传递控制到下一个过滤器 chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { } } 配置web.xml Set Character Encoding SetCharacterEncodingFilter Set Character Encoding /* 如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。还有就是对含有汉字字符的信息进行处理,处理的代码是: package dbJavaBean; public class CodingConvert { public CodingConvert() { // } public String toGb(String uniStr){ String gbStr = " "; if(uniStr == null){ uniStr = " "; } try{ byte[] tempByte = uniStr.getBytes( "ISO8859_1 "); gbStr = new String(tempByte, "GB2312 "); } catch(Exception ex){ } return gbStr; } public String toUni(String gbStr){ String uniStr = " "; if(gbStr == null){ gbStr = " "; } try{ byte[] tempByte = gbStr.getBytes( "GB2312 "); uniStr = new String(tempByte, "ISO8859_1 "); }catch(Exception ex){ } return uniStr; } } 你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如: String str=request.getParameter(“girl”); Byte B[]=str.getBytes(“ISO-8859-1”); Str=new String(B); 通过上述转换的话,提交的任何信息都能正确的显示。

(三) 在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding( "GBK ");也不管用问题是出在处理参数传递的方法上:如果在servlet 中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了: request.setCharacterEncoding( "GBK "); response.setContentType( "text/html;charset=GBK "); 也是不起作用的,返回的中文还是乱码!!!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。同样,在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的,改成get方法依旧不行。由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息,很有可能引起常用字符集的冲突或是不匹配。解决的办法是: 1) 打开tomcat的server.xml文件,找到区块,加入如下一行: URIEncoding=”GBK” 完整的应如下: 2)重启tomcat,一切OK。需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.ht