servlet 输出中文乱码如何解决? 这样应该就没问题了 String xm=request.getParameter("na"); String tbrandtype= new String(xm.getBytes("ISO-8859-1"),"GB2312"); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先检查请求Servlet的JSP页面的编码是否为gb2312,如果编码一致仍解决不了问题,建议使用过滤器使用jsp过滤器的完整例子。 在你的jsp页面上敲上 <% response.setContentType("text/html;charset=gb2312"); request.setCharacterEncoding("gb2312"); %> 首先检查该java文件的编码格式,是否是GB2312,通过request获取值之后要进行转码,转码方法同1楼和3楼,两种方式,最简单的方法是写一个过滤器,这样就不用为每次请求进行转码了。 其实乱码的根源就是在各个页面的编码方式不一致造成的,你把所有要编码的地方都转换成UTF-8,包括数据库的编码方式也设置成UTF-8的,这样乱码方式就可以解决的。 由于Struts框架直接把表单数据发送给了ActionForm,所以这里面没有对HttpRequestServlet进行SetCharacterEncoding,所以默认是按照ISO-8859-1(参见Tomcat 源代码中的org.apache.catalina.connector.HttpRequestBase中的protected void parseParameters()方法),解决的方法,就是在表单提交到ActionForm之前对request进行编码。第一种方法,就是写一个过滤器,对所有请求进行过滤--------------------------------------------------------------------------------过滤器代码:package com.first.struts.filters;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;public class SetCharacterEncodingFilter implements Filter { private String encoding; private FilterConfig filterConfig = null; public void destroy() { this.encoding = null; this.filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(this.encoding); chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { this.encoding = filterConfig.getInitParameter("encoding"); }}-------------------------------------------------------------------------------- 配置文件web.xml <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>com.first.struts.filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </filter-mapping>-------------------------------------------------------------------------------- 第二种方法是替换默认的控制器org.apache.struts.action.ActionServlet --------------------------------------------------------------------------------子类代码:package jp.co.ricoh.gtis.others.profile.controllers; import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionServlet;public class SetEncodingActionServlet extends ActionServlet { protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // TODO Auto-generated method stub String encoding = getInitParameter("encoding"); request.setCharacterEncoding(encoding); super.process(request, response); }}-------------------------------------------------------------------------------- 配置文件web.xml <servlet> <servlet-name>testAction</servlet-name> <servlet-class>jp.co.ricoh.gtis.others.profile.controllers.SetEncodingActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>encoding</param-name> <param-value>Shift_JIS</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>testAction</servlet-name> <url-pattern>*.testdo</url-pattern> </servlet-mapping>此例,凡是通过*.testdo来请求的数据,都会经过参数encoding设定的值来编码。 这要看你传值的jsp页面的编码可以使用这个方法String xm=request.getParameter("na"); String newxm= new String(xm.getBytes("jsp页面的编码"),"要转换的编码"); 这样newxm就显示问中文了。 String tbrandtype= new String(xm.getBytes("ISO-8859-1"),"GB2312"); 页面加上<%@ page language="java" pageEncoding="gbk"%>就可以了最好统一用编码,你这个建议用GBK 顺序反了response.setContentType("text/html;charset=gb2312");response.setCharacterEncoding("gb2312");PrintWriter out=response.getWriter();这句在后面。。 post提交的乱码很好解决:在提取第一个参数之前加上一句:request.setCharacterEncoding("UTF-8");把你的文件编码方式全都改成UTF-8 在jsp页面中也应该设置中文字符:<%@ page language= "java " pageEncoding= "gbk "%> 另外,你在servlet中只是设置了response的中文字符,还应该把request设置一下中文字符!:request.setCharacterEncoding("gb2312"); 最简单的方式就是:把数据库的编码和页面编码都改成:UTF-8 就不会出现乱码问题了。 如果不是post请求,还要这么转换。所以你把请求改成post就行了 就像1L,或者把编码格式设成Utf-8 就像1L,或者把编码格式设成Utf-8 String tbrandtype= new String(xm.getBytes("ISO-8859-1"),"GB2312"); 你的意思是返回参数xm、kl、sex显示为乱码吗?有点不清楚。如果是的话可以试一下下面的方法:首先,看一下你的输入上面参数的表单页面的ContentType里charset是那个编码。假设是gb2312。再到帖子里那个接收参数的servlet里,doPost里所有代码之前加上:httpServletRequest.setCharacterEncoding("gb2312");。注意,是request对象,而非response。再试一下。 先: response.setCharacterEncoding("gb2312");再: PrintWriter out = response.getWriter(); response.setContentType("text/html;charset=gb2312"); 一个Openfire+red5插件搭建sparkweb聊天问题 关于JAVA正则中的分组 自定义标签 弱弱的问一下:“本地DNS和企业授权的DNS” 是啥? 如何在上传图片时,能预览 hibernate 为 mysql 生成的 bit 数据类型时出现问题 谁在用jxl输出excel报下列错误,如何解决? 求职问题请大家说说 请问ireport+jasperrepor能够做oracle数据库的报表吗? 惨啊!初学Jsp便于到这样的怪问题!请指点!!谢谢!! 关于jsp的问题 struts2上传文件
如果编码一致仍解决不了问题,建议使用过滤器使用jsp过滤器的完整例子。
<%
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
%>
第一种方法,就是写一个过滤器,对所有请求进行过滤--------------------------------------------------------------------------------
过滤器代码:package com.first.struts.filters;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;public class SetCharacterEncodingFilter implements Filter {
private String encoding;
private FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(this.encoding);
chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
}}-------------------------------------------------------------------------------- 配置文件web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.first.struts.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter-mapping>-------------------------------------------------------------------------------- 第二种方法是替换默认的控制器org.apache.struts.action.ActionServlet --------------------------------------------------------------------------------
子类代码:
package jp.co.ricoh.gtis.others.profile.controllers;
import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionServlet;public class SetEncodingActionServlet extends ActionServlet { protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// TODO Auto-generated method stub
String encoding = getInitParameter("encoding");
request.setCharacterEncoding(encoding);
super.process(request, response);
}}-------------------------------------------------------------------------------- 配置文件web.xml
<servlet>
<servlet-name>testAction</servlet-name>
<servlet-class>jp.co.ricoh.gtis.others.profile.controllers.SetEncodingActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>testAction</servlet-name>
<url-pattern>*.testdo</url-pattern>
</servlet-mapping>此例,凡是通过*.testdo来请求的数据,都会经过参数encoding设定的值来编码。
String newxm= new String(xm.getBytes("jsp页面的编码"),"要转换的编码"); 这样newxm就显示问中文了。
<%@ page language="java" pageEncoding="gbk"%>
就可以了
最好统一用编码,你这个建议用GBK
response.setCharacterEncoding("gb2312");PrintWriter out=response.getWriter();这句在后面。。
在提取第一个参数之前加上一句:request.setCharacterEncoding("UTF-8");
把你的文件编码方式全都改成UTF-8
<%@ page language= "java " pageEncoding= "gbk "%>
另外,你在servlet中只是设置了response的中文字符,还应该把request设置一下中文字符!:
request.setCharacterEncoding("gb2312");
如果不是post请求,还要这么转换。所以你把请求改成post就行了