jspjava乱码解决

合集下载

________JSP中文参数传至JavaBean出现乱码

________JSP中文参数传至JavaBean出现乱码

JSP中文参数传至JavaBean出现乱码[关键字]:Tomcat,GBK,GB2312,Filter,乱码,JSP,charset,Servlet[摘要]:书上说的都能看懂,但是真正做起来却会遇到问题。

解决这些问题的过程,就是上机练习的意义。

以前遇到的乱码问题要么通过request.setCharacterEnconding("GB2312")解决了,要么就是new String(str.getBytes("ISO-8859-1") , "GB2312")。

但是这回是JavaBean 出问题了。

上面的两句行不通了,只能通过设置Filter来解决。

希望遇到类似问题的朋友,站在我们的肩膀上,能看的更远。

[正文]:写了一个简单的JavaBean,用于计算加减乘除。

CalculateBean.java:package ch6.calcbean;import java.io.*;public class CalculateBean{private int operandFirst;//操作数1private char operator;//运算符private int operandSecond;//操作数2private double result;//运算结果public int getOperandFirst(){return this.operandFirst;}public void setOperandFirst(int op){this.operandFirst = op;}public char getOperator(){return operator;}public void setOperator(char operator){this.operator = operator;}public int getOperandSecond(){return this.operandSecond;}public void setOperandSecond(int op){this.operandSecond = op;}public double getResult(){return this.result;}public void setResult(double result){this.result = result;}public void calculate(){double temp;switch(operator){case '+':temp = getOperandFirst() + getOperandSecond();break;case '-':temp = getOperandFirst() - getOperandSecond();break;case '×':temp = getOperandFirst() * getOperandSecond();break;case '÷':temp = 1.0 * getOperandFirst() / getOperandSecond();break;default:temp = 0;}setResult(temp);}}由Calculate.jsp调用CalculateBean完成计算:Calculate.jsp:<%@page contentType="text/html;charset=GB2312" pageEncoding="GB2312"%> <html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"></head></body><form method="post" action="Calculate.jsp"><input type="hidden" name="action" value="TRUE"/><!-- 表示是否提交-->第一个操作数:<input type="text" name="operandFirst" />运算符:<select name = "operator" ><option value="+">+<option value="-">-<option value="×">×<option value="÷">÷</select>第二个操作数:<input type="text" name="operandSecond" /><input type="submit" value="提交"/></form><%if(request.getParameter("action")!=null){ %><jsp:useBean id="calcu" class="ch6.calcbean.CalculateBean" scope="request"/><jsp:setProperty name="calcu" property="*"/><% calcu.calculate(); %><jsp:getProperty name="calcu" property="operandFirst"/><jsp:getProperty name="calcu" property="operator"/><jsp:getProperty name="calcu" property="operandSecond"/>=<jsp:getProperty name="calcu" property="result"/><%}%></body></html>为了完成JavaBean的调用,需将编译生成的CalculateBean.class部署到WEB-INF/classes/ch6目录下。

JSP中文乱码问题(Eclipse)

JSP中文乱码问题(Eclipse)

JSP中⽂乱码问题(Eclipse)默认已设置以下属性为“utf-8”contentType=”text/html;charset=UTF-8”的作⽤是指定服务器响应给浏览器的编码。

pageEncoding=”UTF-8”的作⽤是设置JSP编译成Servlet时使⽤的编码。

JSP要经过两次的“编码”,第⼀阶段会⽤pageEncoding,第⼆阶段会⽤utf-8⾄utf-8,第三阶段就是由Tomcat出来的⽹页,⽤的是contentType。

第⼀阶段是jsp转译(翻译)成.Java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码⽅案翻译成统⼀的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中⽂乱码。

第⼆阶段是从源码(.java)编译到字节码⽂件(.class),不论JSP编写时候⽤的是什么编码⽅案,经过这个阶段的结果全部是UTF-8的encoding的java源码。

JAVAC⽤UTF-8的encoding 读取java源码,编译成UTF-8 encoding的⼆进制码(即.class),这是JVM对常数字串在⼆进制码(java encoding)内表达的规范。

第三阶段是Tomcat(或其的application Container)载⼊和执⾏阶段⼆的来的JAVA⼆进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段⼀和阶段⼆的参数contentType就发挥了功效。

从Tomcat5.x开始,GET和POST⽅法提交的信息,Tomcat采⽤了不同的⽅式来处理编码,对于POST请求,Tomcat会仍然使⽤request.setCharacterEncoding⽅法所设置的编码来处理,如果未设置,则使⽤默认的iso-8859-1编码。

⽽GET请求则不同,Tomcat对于GET请求并不会考虑使⽤request.setCharacterEncoding⽅法设置的编码,⽽会永远使⽤iso-8859-1编码。

Java中文乱码的解决方案

Java中文乱码的解决方案

Java中文乱码的解决方案jsp+Servlet的形式,在jsp页面向后台发送的请求里包含中文时,后台采用String name = request.getParameter("name")接收到的是乱码,我在网上找了很多资料,有网友说request.getParameter是默认采用ISO8859-1来编码的,必须进行转换:我总结了一下,解决中文乱码大概有以下几种方式:1、采用decode()方法.URLDecoder.decode(s)2、采用设置字符集的方式request.setCharacterEncoding("utf-8");3、在页面上定义charset的字符集<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><meta http-equiv="Content-Type" content="text/html; charset=utf-8">4、在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8<filter><filter-name>encodingFilter</filter-name><filter-class>com.demo.filter.CoreFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>5、在form表单里定义编码accept-charset="utf-8" onsubmit="document.charset='utf-8';"6、更改ContentTypes的值改变myeclipse里ContentTypes的值为utf-87、改变tomcat字符集通过改变server.xml文件里的字符集来接收中文8、采用转码的方式nameCode = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");补充:如果是Servlet向页面发送的数据中包含中文,可以采用如下方式解决:response.setContentType("text/html;charset=utf-8");。

JSP的中文乱码问题

JSP的中文乱码问题

JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。

下面来逐一解决其中的乱码问题。

一、JSP页面中文乱码在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。

先看一个JSP程序:[java]view plaincopyprint?1.<%@ page language="java"import="java.util.*" %>2.<html>3. <head>4. <title>中文显示示例</title>5.6. </head>7. <body>8.这是一个中文显示示例:9. <%10. String str = "中文";11. out.print(str);12. %>13. </body>14.</html>上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。

运行后在浏览器中显示如图所示原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代1.<%@ page language="java"import="java.util.*" contentType="text/html;charset=GB2312" %>再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。

二、URL传递参数中文乱码一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。

下面是一个示例程序[java]view plaincopyprint?1.<%@ page language="java"import="java.util.*" contentType="text/html; charset=gb2312"%>2.<html>3. <head>4. <title>URL传递参数中文处理示例</title>5. </head>6. <%7. String param = request.getParameter("param");8. %>9. <body>10. <a href="URLCharset.jsp?param='中文'">请点击这个链接</a><br>11.你提交的参数为:<%=param%>12. </body>13.</html>上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。

jsp页面显示中文乱码解决

jsp页面显示中文乱码解决

jsp页面显示中文乱码:jsp页面的编码方式有两个地方需要设置:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page contentType="text/html;charset=utf-8"%>其中:pageEncoding 指的是jsp文件本身在本地保存时的编码方式。

contentType的charset 是指服务器发送网页内容给客户端时所使用的编码。

从第一次访问一个jsp页面开始,到这个页面被发送到客户端,这个Jsp页面要经过三次编码转换:第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。

第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。

JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。

第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效所以最终的解决方法为:在jsp页面设置pageEncoding或者contentType的其中一个为支持中文的编码格式(如utf-8,gbk,gb2312)。

java中文乱码解决方法

java中文乱码解决方法

java中文乱码解决方法1、解决文件中文乱码:1.1、修改文件字符编码:由于不同系统,比如Unix下用GBK格式编辑的文件,在Windows中就会乱码,此时可以使用Notepad++(记事本插件),将文件编码转换为系统默认的utf-8,8为Unicode编码。

1.2、修改系统语言及字符编码:此外,也可以通过改变操作系统的语言及字符编码,这种方法我们可以在控制面板-区域和语言的地方进行修改,再次点击其中的管理,在点击详细设置,这时候就可以看到字符集,将其设置为utf-8。

2、解决程序中文乱码:2.1、使用unicod-8格式编码:在这种情况下,一定要注意程序代码的编码格式,一定要以utf-8格式进行编码,而不是GBK,否则一样会出现乱码。

2.2、设置字符集:有时候,可以在程序中设置语言字符集,例如:response.setContentType("text/html;charset=utf-8");用于普通的JSP页面编码设置,也可以在web.xml中设置characterEncoding3、修改Tomcat的默认编码:可以修改tomcat的server.xml文件,将其默认编码为utf-8,在相应的位置加上URIEncoding="utf-8"。

4、前端乱码解决方法:也可以到浏览器中去修改编码,比如:Firefox浏览器中,可以按Ctrl + U,Chrome可以按Ctrl + U,IE下可以第一个菜单栏中点击View,然后选择Encoding,转换为相应的编码即可。

5、对数据库使用正确的编码:在不同的数据库中当我们有gbk的字符编码的时候,一定要创建数据库时候指定好字符编码,让数据库与整个程序保持一致,如果仅仅程序有编码时,数据库没有则容易出现乱码。

总之,我们在解决Java中文乱码的问题是要以系统- web页面-程序-数据库为关键点进行检查,以确保编码的一致性。

5种JSP页面显示为乱码的解决方法

5种JSP页面显示为乱码的解决方法

5种JSP页面显示为乱码的解决方法5种JSP页面显示为乱码的解决方法1. JSP页面显示乱码。

2. Servlet接收Form/Request传递的参数时显示为乱码3. JSP接收Form/Request传递的参数时显示为乱码4. 用<jsp:forward page="catalog2.html"></jsp:forward>时页面显示乱码5. 数据库存取的时候产生乱码。

下面给出全部解决方法:1. JSP页面显示乱码。

第一种为在页面的开头加上:<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!--这里的GBK可以由gb2312代替,此处以GBK为例。

下同 -->注:有时候如果不再页面开头加上这句,则页面中无法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,这是由于默认情况下,JSP是用iso-8859-1来编码的,可以在Window->Preferences->General->Content Type选项下,在右边的窗口选择Text->Jsp,然后在下面的Default Encoding由默认的iso-8859-1改为GBK,然后点击update即可解决。

然而这种方式会带来一些问题:由于这一句在其他文件include该文件的时候不能被继承,所以include它的文件也需要在文件开头加上这句话,此时如果用的是pageEncoding="gbk"则会出现问题。

类似于org.apache.jasper.JasperException: /top.jsp(1,1) Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html;charset=GBK, new: text/html;charset=gbk).类似地,如果两个文件一个用的是gbk,一个用的是gb2312也会出现问题。

精选JSP中文乱码的产生原因及解决方案

精选JSP中文乱码的产生原因及解决方案

精选JSP中文乱码的产生原因及解决方案JSP中文乱码的产生原因及解决方案在JSP的开发过程中,经常出现中文乱码的问题,可能一直困扰着大家,现在把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。

首先需要了解一下Java中文问题的由来:Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。

原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其它媒介交互产生的乱码问题。

首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。

基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312或-ecoding UTF-8编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。

下面是一些常见中文乱码问题的解决方法(下面例子中ecoding 采用的是gb2312,也可设为ecoding GBK或ecoding UTF-8):一、JSP页面乱码这种乱码问题比较简单,一般是页面编码不一致导致的乱码,一般新手容易出现这样的问题,具体分以下两种情况:➢未指定使用字符集编码下面的显示页面(display.jsp)就出现乱码:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>这种乱码的原因是没有在页面里指定使用的字符集编码,JSP页面中出现了中文字符,而默认的ISO-8859-1字符集中无中文字符,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,在JSP页面中指定编码方式(gb2312),和浏览器解码方式设置相同,即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就能够消除乱码了。

java中处理乱码问题个人总结

java中处理乱码问题个人总结

[个人总结]java中处理乱码问题个人总结java乱码的问题的可谓是老生常谈了,自从接触java以来,就不断地与中文乱码的问题打交道,最近的参与的报表工具开发中,遇到的乱码问题更是让人头疼,随着项目工作的进度,自己总结了一下处理乱码的心得,在这里与大家一起分享一下。

Java的内核以及class文件都是采用的unicode的编码,这样java程序就具有了很好的跨平台性,随之也就带来了乱码的问题的麻烦。

出现乱码的问题原因主要有两个方面Java及JSP文件本身编译时产生的乱码和Java程序与其他媒介交互产生的乱码。

下面对于这两种情况产生的乱码,分别说明解决方法:第一种情况:(Java或JSP自身产生的乱码)Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码,基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。

这种情况比较简单。

呵呵。

如果有同事碰到特别的情况不能解决,不妨一起来讨论一下呀。

对于第二类的这种乱码,可能的情况比较多,我们也分别来看:1、页面参数传递是出现的乱码这是因为Jsp获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。

解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策在Java Web项目的开发过程中,中文乱码问题是一种经常遇到的问题,这是因为Java 中默认使用的是Unicode编码,而在Web开发中,常常会涉及到数据通过HTTP协议传输,由于HTTP默认使用的是ISO-8859-1编码,因此就会出现中文乱码的问题。

中文乱码问题主要有以下几种形式:1.数据库中的中文显示为乱码;4.页面跳转后的中文显示为乱码。

为了解决这些中文乱码问题,开发人员可以采取以下对策:1.设置服务器的默认字符集为UTF-8在Tomcat配置文件server.xml里面,找到Connector节点下添加URIEncoding="UTF-8"即可设置默认字符集为UTF-8。

如下:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />2.设置response的头信息在Java中,可以通过设置response的Content-Type头信息来指定编码方式。

常用的编码方式有UTF-8和GBK。

具体如下:response.setContentType("text/html;charset=UTF-8");3.设置JSP页面的page指令在JSP页面中,可以通过设置page指令来指定编码方式。

例如:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>4.修改MySQL字符集如下:ALTER DATABASE database_name DEFAULT CHARACTER SET utf8;5.修改Hibernate的配置文件在Hibernate的配置文件hibernate.cfg.xml中,一般会配置如下:<property name="eUnicode">true</property>6.修改Web.xml配置文件<?xml version="1.0" encoding="UTF-8"?>7.在表单中添加字符集编码8.避免字符串转换在Java中,字符串转换时,需要指定编码方式。

乱码解决的四种方法

乱码解决的四种方法

乱码解决的四种方法下边提供4种不同情况的乱码解决方案,基本上包括了web开发中出现乱码的不同情况。

主要针对java+ mysql 开发环境提出的乱码解决方案,只要作相应修改,可以用于不同语言环境的乱码问题解决。

下边提供4种不同情况的乱码解决方案,基本上包括了web开发中出现乱码的不同情况。

主要针对java+mysql开发环境提出的乱码解决方案,只要作相应修改,可以用于不同语言环境的乱码问题解决。

一、JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码:程序代码<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>对不同的WEB服务器和不同的JDK版本,处理结果就不一样。

原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。

解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。

完整页面如下:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>二、表单提交中文时出现乱码下面是一个提交页面(submit.jsp),代码如下:程序代码<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><form name="form1" method="post" action="process.jsp"><div align="center"><input type="text" name="name"><input type="submit" name="Submit" value="Submit"></div></form></body></html>下面是处理页面(process.jsp)代码:程序代码<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%=request.getParameter("name")%></body></html>如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。

Java乱码问题解决

Java乱码问题解决

b.在 HTML 的 head 标签中添加如下语句。 Java 代码 1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
c.保证 JSP 的页面编码与上面两个的 charset 相同,这点我有在文章的第一点说过。 上面的字符集可以根据需要自己灵活选择,不一定非要 utf-8。不过因为 utf-8 对各国语言,特别是中文支持较好,所以推荐 使用。我就曾经遇到过滘在 GB2312 编码的页面无法正常显示的问题。 5.Post 和 Get 传递中文,后台获取乱码。 前台传递中文也分为 Get 和 Post 方法。 a.Get 方法的情况: Get 方法的时候主要是 URL 传递中文。 如果是在 js 文件中,可以使用如下代码进行中文转码。 Js 代码 1. 2. var url ="/s?industry=编码" url = encodeURI(url);
无论使用哪种方法,在后台获取中文的时候都要使用如下代码: Java 代码 1. 2. 3. 【注】 1.对于 request,是指提交内容的编码,指定后可以通过 getParameter()则直接获得正确的字符串,如果不指定,则默认使 用 iso8859-1 编码,为了统一,需要提交指定传输编码。 2.上面代码的第二句好像和第 2 条中给出的公式矛盾。我也纠结了好久,最后发现 ISO8859-1 是一种比较老的编码,通常叫 做 Latin-1,属于单字节编码,正好和计算机最基础的表示单位一致,因此使用它进行转码一般也没有问题。 iso-8859-1 是 JAVA 网络传输使用的标准字符集,而 gb2312 是标准中文字符集,当你作出提交表单等需要网络传输的操作的 时候,就需要把 iso-8859-1 转换为 gb2312 字符集显示,否则如果按浏览器的 gb2312 格式来解释 iso-8859-1 字符集的话, 由于 2 者不兼容,所以会是乱码。为了省事,建议统一使用 utf-8 字符集。 b.POST 方法的情况。 对于 Post 的情况就比较简单了,只需要在 post 的函数调用部分,制定 post 的 header 的字符集,如: Js 代码 1. 2. 3. xmlHttp.open("post", url , true); xmlHttp.setRequestHeader("Content-Type","text/xml; charset= utf-8"); xmlHttp.send(param); request.setCharacterEncoding("utf-8"); String industry = new String( request.getParameter("industry ").getBytes("ISO8859-1"),"UTF-8");

java中如何解决乱码问题总结

java中如何解决乱码问题总结
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
请输入中文:<input type="text" name="chStr">
<input type="submit" value="确定">
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
<a href="test2.jsp?chStr=中文">点击这里提交中文参数</a>
</form>
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
<meta http-equiv=param content=no-cache>
在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策

Java Web项目开发中的中文乱码问题与对策在Java Web项目开发过程中,中文乱码问题是常见的。

这个问题出现的原因往往是因为编码不一致或者不正确导致的。

下面将介绍中文乱码问题的原因以及解决方法。

1. 问题原因1.1 字符编码不一致在Java Web项目中,字符编码的一致性非常重要。

服务器和浏览器之间的数据传递,涉及到不同的编码,例如URIEncoding、Charset、页面的编码等。

如果这些编码不一致,就容易出现中文乱码的问题。

1.2 编码不正确在设置字符编码时,往往会出现编码设置不正确的情况。

在使用InputStream和OutputStream读写文件时,如果没有正确设置编码,就会导致中文乱码的问题。

2. 解决方法2.1 修改服务器配置在Tomcat等服务器的配置文件(如server.xml)中,可以添加如下配置,设置URIEncoding和contentType的编码为UTF-8:```xml<Connector port="8080" protocol="HTTP/1.1"URIEncoding="UTF-8"connectionTimeout="20000"redirectPort="8443" />```2.2 设置请求参数的编码在Servlet的doGet和doPost方法中,可以使用以下代码,将请求和响应的字符编码设置为UTF-8:```javarequest.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");```2.5 使用正确的编码读写文件在Java的IO操作中,要确保使用正确的编码读写文件。

如果读取一个文本文件,需要使用BufferedReader,并且指定正确的编码,如UTF-8:```javaBufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));```。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中文乱码总结:1-->响应中的乱码:单个页面中,如果出现中文(注意不是post中文也不是get中文,只是显示中文而已),而且使用的是<%@page contentType="text/html;charset=iso-8859-1"%> 此时显示的中文就是乱码,为什么呢?因为charset=iso-8859-1 是设置http的响应(response)中的编码信息,因为是中文,所以http给浏览器显示的汉字是乱码。

2-->post乱码:两个页面(或多个页面)通过form表单post传值(form的默认提交方式都是GET)时,这里与1不同,为什么呢?因为此时发送了请求有request,而1中没有request只是响应而已。

发送请求的时候,使用的编码默认的是iso-8859-1,意味着只有英文是有效字符,这个限制是因为当初指定http标准的成员都来自英语国家,所以如果使用默认的方式从请求获取数据,中文一定会全部变成乱码。

此时就要加上request.setCharacterEncoding("gbk");有了请求request.setCharacerEncoding("gbk")编码方式和http的响应(response)中的编码信息<%@pagecontentType="text/html;charset=gbk"%>两个都gbk,此时body中的(注意是body,如果是url就会有问题往下看就知道了)中文就不会显示为乱码a---乱码出现的过程是这样的,传的是汉字,发送请求的默认编码是iso-8859-1,此时把汉字按iso-8859-1转码出现问题出现??或莫名的符号,响应的时候位数都打乱了(iso-8859-1和gbk编码位数不一样),虽然<%@pagecontentType="text/html;charset=gbk"%>但还是会出现乱码。

b---而采用request.setCharacerEncoding("gbk")设置请求编码后的话,汉字就不会被转成乱码。

3-->get乱码POST方式下的解决方式还算简单,因为POST方式下提交的数据都是以二进制的方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决。

GET方式下会将参数直接附加到url后面,这部分参数无法使用request.setCharacterEncoding()处理,结果就是get形式的所有中文都变成了乱码解决方法:先从request中获得参数(因为无法设置编码方式,所以汉字以编码iso-8859-1传过来),接着把字符串按照iso-8859-1编码打散成byte数组,然后用gb2312编码组合成新字符串,最后打印出来就是正常的中文了。

<%String username = request.getParameter("username");byte[] bytes = username.getBytes("iso-8859-1");String result = new String(bytes, "gb2312");out.print(result);%>写在一起就是:<%=newString(request.getParameter("username").getBytes("iso-8859-1"),"gb2312")%>Java/JSP中文乱码问题解决心得自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。

一、Java中文问题的由来Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。

原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。

首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。

基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。

本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。

很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java 程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:从页面form提交数据到java程序 byte->char从java程序到页面显示 char—>byte从数据库到java程序 byte—>char从java程序到数据库 char—>byte从文件到java程序 byte->char从java程序到文件 char->byte从流到java程序 byte->char从java程序到流 char->byte如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

二、解决方法前面已经提到了Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。

解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(Java或JSP自身产生的乱码请参看第一部分)。

1、JSP与页面参数之间的乱码JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。

解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。

如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决。

如果不想在每个文件里都写这样两句话,更简洁的办法是使用Servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:web.xml:<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>net.vschool.web.CharacterEncodingFilter</filter-class> <init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>CharacterEncodingFilter.java:public class CharacterEncodingFilter implements Filter{protected String encoding = null;public void init(FilterConfig filterConfig) throws ServletException {this.encoding = filterConfig.getInitParameter("encoding");}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{request.setCharacterEncoding(encoding);response.setContentType("text/html;charset="+encoding);chain.doFilter(request, response);}}2、Java与数据库之间的乱码大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。

很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。

其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。

3、Java与文件/流之间的乱码Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。

其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。

读写字符文件建议使用基于字符的FileReader 和FileWriter,省去了字节与字符之间的转换。

相关文档
最新文档