Servlet中文乱码解决方法

合集下载

Java中HttpServletResponse响应中文出现乱码问题

Java中HttpServletResponse响应中文出现乱码问题
2、加上代码
response.setCharacterEncoding("UTF-8"); response.getWriter().write("您好中国hello");
Hale Waihona Puke 则浏览器结果为:这是因为浏览器解析问题。 加上代码:
response.setHeader("Content-type", "textml;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); response.getWriter().write("您好中国hello");
则浏览器结果为:
以上所述是小编给大家介绍的Java中HttpServletResponse响应中文出现乱码问题的全部叙述,希望对大家有所帮助,如果大 家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
这篇文章主要给大家介绍了关于如何利用java编写24点小游戏的相关资料文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧
Java中 HttpServletResponse响应中文出现乱码问题
以字符串的形式输出。 1、response.getWriter().write("您好中国hello"); 如果这样输出的话。则浏览器结果为:

中文乱码问题及其解决办法

中文乱码问题及其解决办法

中⽂乱码问题及其解决办法1.解决HTML页⾯中的中⽂问题:为了使HTML页⾯很好地⽀持中⽂,就必须在每个HTML页⾯的头部增加如下代码:<HEAD>...<META http-equiv=Content-Type content="text/html;charset=gb2312">...<HEAD>2.解决JSP页⾯中的中⽂问题<%@ page contentType="text/html;charset=gb2312" language="java"%>3.解决Servlet请求和响应结果的中⽂问题为了使Servlet页⾯很好地⽀持中⽂,就必须在每个Servlet页⾯的头部增加如下代码:response.setCharacterEncoding("gb2312");request.setCharacterEncoding("gb2312");4.解决页⾯数据传输的中⽂问题为了使中⽂数据在各页⾯(组件)之间正常传递,最佳的⽅法就是采⽤编码过滤器来解决。

在WEB.XML中配置⼀个编码过滤器,内容如下:<!--定义编码过滤器--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>5.解决HTTP(get)请求中的中⽂问题:在默认情况下,IE浏览器发“ISO-8859-1”的编码格式发送请求,如果接收到HTTP的get请求中⽂参数时出现乱码,就可以对其进⾏编码转换,例如:String param = request.getParameter("param");param = new String(param.getBytes("ISO-8859-1", "GB2312"));也可以通过修改Tomcat的server.xml⽂件来解决:<Connector port = "8080"...URIEncoding="GB2312"/> -->增加这项6.解决MySQL数据库的中⽂问题:解决MySQL数据库中⽂问题主要在JDBC驱动的URL上,例如:jdbc:mysql://localhost/test?user=root&password=123456&useUnicode=true&characterEncoding=gb2312在设计数据表的时候也要指明其编码⽅式。

jsp页面传值中文乱码问题解决

jsp页面传值中文乱码问题解决

JSP中文乱码种类
1.JSP文件中文内容显示乱码
2.调用Servlet显示乱码
3.Post表单乱码
4.Get参数乱码
5.存取数据库乱码
1
•通过浏览器调用JSP页面,在客户端浏览器中所有的中文内容出现乱码
•解决方案:替换ISO-8859-1,修改页面编码为UTF-8
调用Servlet显示乱码
•通过浏览器调用Servlet,Servlet在浏览器中显示内容出现乱码
调用Servlet显示乱码
•解决方案:在Servlet使用response在输出内容之前,先执行response.setContentType("text/html;charset=UTF-8")设定输出内容的编码为UTF-8
Post表单乱码
•提交页面表单元素给对应的JSP页面或者Servelt后,接收方出现表单数据中文值乱码
Post表单乱码
•解决方案:在接收POST提交的参数之前,使用request.setCharacterEncoding(“UTF-8")设定接收参数的内容使用UTF-8编码
Get查询字符串乱码
•用Get方式传递参数,中文字符会出现乱码
ISO8859_1ISO8859_1gb2312gb2312
客户端通过GET 提交中文编码问题简单流程:
假如:
客户端和服务器用gb2312
HTTP 传输编码用ISO8859_1
则:
服务器需要指示客户端文档的编码方式
Get查询字符串乱码
•解决方案:Get提交默认是以ISO88591传递,如果容器没有做配置修改,程序则需要手工进行编码转换
存取数据库乱码
•解决方案:在数据库连接参数中设置编码值。

中文乱码问题的解决

中文乱码问题的解决

Java 中文问题的初步认识
我们基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GB2312 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。
String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);
getBytes 方法用于将中文字符以“ISO-8859-1”编码方式转化成字节数组,而“GBK” 是目标编码方式。我们从以ISO-8859-1方式编码的数据库中读出中文字符串 s1 ,经过上述转换过程,在支持 GBK 字符集的操作系统和应用软件中就能够正确显示中文字符串 s2 。
dbstr1 = new String(dbbyte1);
在转换字符串时不采用系统默认编码方式,而直接采用“ GBK” 或者 “GB2312” ,在 A 和 B 两种情况下,从数据库取数据都没有问题。
II.处理方式与“取中文”相逆,先将 SQL 语句按系统缺省编码方式转化为字节数组,再按“ISO-8859-1”编码方式转化为 STRING ,最后送去执行,则中文信息可正确写入数据库。
I.用 JDBC 执行 SELECT 语句从服务器端读取数据(中文)后,将数据用 APPEND 方法加到 TextArea(TA) ,不能正确显示。但加到 List 中时,大部分汉字却可正确显示。
将数据按“ISO-8859-1” 编码方式转化为字节数组,再按系统缺省编码方式 (Default Character Encoding) 转化为 STRING ,即可在 TA 和 List 中正确显示。

中文乱码的处理

中文乱码的处理

中文乱码的处理1、将所有出现的编码方式都设为UTF-8或GB2312。

2、使用servlet过滤器(1)过滤器概念过滤器是在数据交互之间过滤数据的中间组件,独立于任何平台或者Servlet 容器。

在WEB中,Servlet过滤器是服务器端WEB容器中的一个WEB组件,它们拦截请求和响应,并监视、修改或以某种方式处理正在交互的数据。

Servlet过滤器可以应用在客户机和 servlet 之间、servlet 和 servlet 或JSP 页面之间,以及所包括的每个 JSP 页面之间。

(2)实现一个 Servlet 过滤器Servlet过滤器 API 包含javax.servlet包中的 3 个接口,分别是 Filter 、FilterChain 和 FilterConfig 。

实现一个 Servlet 过滤器要经历三个步骤。

[1]编写 Servlet 过滤器实现类。

[2]配置 Servlet 过滤器。

把该过滤器添加到 Web 应用程序中(通过在 Web 部署描述符 /web.xml 中声明它);[3]部署 Servlet 过滤器。

把过滤器与应用程序一起打包并部署它;Servlet容器对部署描述符中声明的每一个过滤器,只创建一个实例(或实例池)。

与Servlet类似,容器将在同一个过滤器实例上运行多个线程来同时为多个请求服务,因此,开发过滤器时,也要注意线程安全的问题。

(3)编写过滤器实现类[1]Filter接口:所有的Servlet过滤器类都必须实现javax.servlet.Filter 接口<1> init(FilterConfig):这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。

在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。

<2> doFilter(ServletRequest,ServletResponse,FilterChain):这个方法完成实际的过滤操作,当客户请求访问于过滤器关联的URL时,Servlet 容器将先调用过滤器的doFilter方法。

中文乱码解决方案

中文乱码解决方案

IE6的“以UTF-8发送URL”选项设置对请求页面字符编码有影响吗?关键字: 字符编码最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下:1.所有页面的charset设置为UTF-8。

2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。

3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request 的字符集设定为utf-8,解决请求以post方式提交的乱码问题。

其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了,如果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。

真搞不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页面,这中间涉及的字符集转换,编码,解码过程一概不清楚。

这次,折腾了半天,总算是更进一步了解了字符编码问题,这里做个总结。

先看我的总结,有不对的地方欢迎批评。

首先我们看下,一个请求响应的流程浏览器 IE/FireFox -------->Servlet容器----------------->显示页面编码使用容器的URIEncoding转码解码我把用户发送请求方式不同引起的中文问题划分了四种类型:1、表单的get提交2、表单的post提交3、页面链接传递中文参数4、地址栏中参数直接输入中文提交1.首先我们看表单get方式提交浏览器根据页面的charset编码方式对页面进行编码,然后提交至服务器,首先进入对应的字符编码过滤器(如果有的话),不过Tomcat6.0对于get 提交方式采用的是server.xml文件中的URIEncoding编码方式,而并不会采用过滤器中设置的编码,那么根据我的环境设置,jsp页面都使用UTF-8的编码,Servlet容器的URIEncoding也设置为UTF-8,则servlet不用进行转码即可正确解码,获得正常的中文字符串。

中文乱码常用解决方法

中文乱码常用解决方法
自己经验:在Servlet里跳转到jsp,在Servlet 里设置
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");并且放在PrintWriter out = response.getWriter();之前
xmlHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xmlHTTP.send("username=ajax测试");
Hale Waihona Puke 2> post 方式提交(get 不能 在目标页面获取不到值) 将参数写在send()方法中 可结合Filter过滤器
如: xmlHTTP.open("post","index.jsp",true);
在目标页面解码
String name =request.getParameter("username");
name = .URLDecoder.decode(name,"utf-8"); // 单一解码 一次
2. 在AJAX中以?的形式传向目标资源 (*重点*)
1> post / get 方式提交 将参数写在url中 send(null)方法为空 不能够结合Filter过滤器
如: var url="ss.jsp?username=你好";
在JSP里不需设置,

中文乱码处理

中文乱码处理

今天在部署一个webservices程序的时候,从页面获取数据的servlet出现了乱码问题,在servlet中我已经把request.setCharacterEncoding("GB2312");这段文字加入到代码中去,但是还是出现乱麻问题。

到网上找资料,如下:JAVA是Unicode编码,你先转换成ISO8859-1,然后再转换成GBK 或是GB2312.java 代码复制代码代码如下:request.setCharacterEncoding("ISO8859-1");ad=request.getParameter("name");byte[] temp3 = ad.getBytes("GBK");String str = new String(temp3);这样就是中文啦!还有一种更简单的方法,就是直接在服务器里设置编码转换。

用的是TOMCAT5.0.28。

在..\Tomcat 5.0\conf目录里找到SERVER.XML文件,用写字板打开它,设置如下:里面增加一个属性就可以了,URIEncoding="GBK"测试通过,搞定,然后就是request.setCharacterEncoding("GB2312")这句话到底起了什么作用,如果它不能解决乱麻问题,我们用它来起什么作用,整理资料如下:(一) JSP页面上是中文,但是看的是后是乱码:解决的办法就是在JSP页面的编码的地方,因为Jsp转成Java文件时的编码问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的Java中间文件来确认(二) 当用Request对象获取客户提交的汉字代码的时候,会出现乱码:解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下:复制代码代码如下:public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException {request.setCharacterEncoding("GBK");// 传递控制到下一个过滤器chain.doFilter(request, response);}配置web.xml复制代码代码如下:<filter></filter><filter-name></filter-name>Set Character Encoding<filter-class></filter-class>SetCharacterEncodingFilter<filter-mapping></filter-mapping><filter-name></filter-name>Set Character Encoding<url-pattern></url-pattern>/*如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
throwsIOException, ServletException {
//获取Filter的初始化参数的值
String encoding =config.getInitParameter("encoding");
if(encoding !=null&& !"".equals(encoding)){
第二种:采用过滤器方式
1)在.jsp页面中,修改字符集设置:
<%@pagepageEncoding="GB2312"%>
或者,<%@pagecontentType="text/html;GB2312"%>
该代码的作用就是告诉JSP引擎(如Tomcat),本页面使用的字符集是GB2312。如果没有此行代码,JSP则使用默认的字符集(通常为utf-8)。
2)er.java
packagecn.wjz.web.filter;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
//设置请求数据的编码方式
request.setCharacterEncoding(encoding) ;
}
//把请求和响应对象传给过滤链中的下一个要调用的过滤器或Servlet
chain.doFilter(request, response) ;
}
//Filter初始化时的回调方法
//FilterConfig接口实例中封装了这个Filter的初始化参数
</filter-mapping>
privateFilterConfigconfig;
//此Filter被释放时的回调方法
publicvoiddestroy() {
}
//主要做过滤工作的方法
//FilterChain用于调用过滤器链中的下一个过滤器
publicvoiddoFilter(ServletRequestrequest,
ServletResponse response,FilterChain chain)
//参数值默认的字符集是ISO8859_1,如果不进行字符集转换,将导致汉字乱码
String sname = request.getParameter("name") ;
String name =newString(sname.getBytes("ISO8859_1"),"GB2312") ;
//new String(字符串值.getBytes(“原编码方式”),”目录编码方式”);
JSP
第一种:硬编码方式
1)在.jsp页面中,修改字符集设置:
<%@pagepageEncoding="GB2312"%>
或者,<%@pagecontentType="text/html;GB2312"%>
该代码的作用就是告诉JSP引擎(如Tomcat),本页面使用的字符集是GB2312。如果没有此行代码,JSP则使用默认的字符集(通常为utf-8)。
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
/**请求数据统一编码过滤器*/
publicclassCharacterEncodingFilterimplementsFilter {
<param-value>GB2312</param-value>
</init-param>
</filter>
<!--过滤器的映射配置-->
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<filter-class>cn.wjz.web.filter.CharacterEncodingFilter
</filter-class>
<!--配置初始化参数-->
<init-param>
<param-name>encoding</param-name>
<!—设置encoding的值为GB2312 -->
2)更改Servlet中相关的代码:
设置输出页面的字符集GB2312,并对获取的内容进行强制转码;
更改,i82.
//JSP引擎会自动把输出的页面转换成指定的字符集
response.setCharacterEncoding("text/html;GB2312");
//使用request.getParpameter("参数名");获得参数值
publicvoidinit(FilterConfig config)throwsServletException {
this.config= config ;
}
}
3)注册过滤器,修改配置文件web.xml
<!--定义一个过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
相关文档
最新文档