表单提交中文乱码问题
乱码问题详解
1、最基本的乱码问题。
这个乱码问题是最简单的乱码问题。
一般新会出现。
就是页面编码不一致导致的乱码。
<%@ page language="java" pageEncoding="UTF-8"%><%@ page contentType="text/html;charset=iso8859-1"%><html><head><title>中文问题</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head></head><body>我是个好人</body></html>三个地方的编码。
第一个地方的编码格式为jsp文件的存储格式。
Ecljpse会根据这个编码格式保存文件。
并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。
因为存为UTF-8的文件被解码为iso8859-1,这样如有中文肯定出乱码。
也就是必须一致。
而第二处所在的这一行,可以没有。
缺省也是使用iso8859-1的编码格式。
所以如果没有这一行的话,“我是个好人”也会出现乱码。
必须一致才可以。
第三处编码为控制浏览器的解码方式。
如果前面的解码都一致并且无误的话,这个编码格式没有关系。
有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。
因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。
出现了乱码。
2、表单使用Post方式提交后接收到的乱码问题这个问题也是一个常见的问题。
这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。
中文参数乱码问题解决方案(精选5篇)
中文参数乱码问题解决方案(精选5篇)第一篇:中文参数乱码问题解决方案问题1:在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以和两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中加入一段代码:debug=“0” connectionTimeout=“20000”disableUploadTimeout=“true” URIEncoding=“true”/>问题2:如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:问题3:在jsp页面里的代码修正://如不注明是post方式则默认是get方式问题4:在servlet中的代码修正在doPost方法里面最上面的位置加上如下代码:response.setCharacterEncoding(“gb2312”);request.setCharacterEncoding(“gb2312”);第二篇:struts2 action接收到的参数中文乱码的问题struts2 action接收到的参数中文乱码的问题(2011-06-16 10:55:44)转载标签:分类:技术收藏utf-8 乱码 gb2312 字符集编码方法杂谈中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。
大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了^_^。
解决方法如下:1.在struts2里面,最好将所有字符都设成utf-8。
1.1 在jsp页面设定字符编码。
这边有必有说明的是如果是jsp+java bean+servlet 的方案,中文乱码很好解决,统一设成gb2312就可以了。
JSP+MySQL中文乱码问题post提交乱码解决方案
JSP+MySQL中⽂乱码问题post提交乱码解决⽅案写了两个jsp页⾯index.jsp和mysql_insert.jsp。
数据处理流程为:在浏览器(chrome)上访问index.jsp后在其表单上输⼊数据,提交⾄mysql_insert.jsp,mysql_insert.jsp⾸先将接收到的数据按变量存⼊MySQL的html_db数据库的person_tb中(该表原有部分数据),然后mysql_insert.jsp再拿出该表中所有数据显⽰在mysql_insert.jsp页⾯上。
现在发现,当提交的数据中含有中⽂(⽐如变量姓名的值为中⽂)时,mysql_insert.jsp页⾯上显⽰新增的那条记录中的相应中⽂(姓名的值)乱码,其他数据都显⽰正常,查看数据库,发现也是相应的含有中⽂的变量值(姓名的值)乱码。
乱码情况如下图:index.jsp中第⼀⾏有语句:<%@ page contentType="text/html;charset=gb2312"%> ,在浏览器(chrome)中访问此页⾯时⽆乱码(主要指中⽂乱码,英⽂乱码现象还没遇见过)。
(试过将gb2312换成utf-8,访问后中⽂乱码)mysql_insert.jsp中第⼀⾏有语句:<%@page language="java" pageEncoding="UTF-8"%>,在浏览器中直接访问此页⾯时⽆乱码。
mysql_insert.jsp页⾯的代码如下:复制代码代码如下:<%@page language="java" pageEncoding="UTF-8"%><%@ page import="java.sql.*" %><HTML><HEAD><TITLE>add message into table </TITLE></HEAD><BODY><%String id=request.getParameter("id"); //从表单获得String name=request.getParameter("name"); //从表单获得String sex=request.getParameter("sex"); //从表单获得String age=request.getParameter("age"); //从表单获得try{/** 连接数据库参数 **/String driverName = "com.mysql.jdbc.Driver"; //驱动名称String DBUser = "root"; //mysql⽤户名String DBPasswd = "123456"; //mysql密码String DBName = "html_db"; //数据库名String connUrl = "jdbc:mysql://localhost/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;Class.forName(driverName).newInstance();Connection conn = DriverManager.getConnection(connUrl);Statement stmt = conn.createStatement();stmt.executeQuery("SET NAMES UTF8");String insert_sql = "insert into person_tb values('" + id + "','" + name + "','" + sex + "','" + age + "')";String query_sql = "select * from person_tb";try {stmt.execute(insert_sql);}catch(Exception e) {e.printStackTrace();}try {ResultSet rs = stmt.executeQuery(query_sql);while(rs.next()) {%>ID:<%=rs.getString("id")%> </br>姓名:<%=rs.getString("name")%> </br>性别:<%=rs.getString("sex")%> </br>年龄:<%=rs.getString("age")%> </br> </br><%}}catch(Exception e) {e.printStackTrace();}//rs.close();stmt.close();conn.close();}catch (Exception e) {e.printStackTrace();}%></body></html>我的数据库设置的是全部使⽤UTF-8编码,如下图:我的虚拟⽬录下的web.xml内容如下:tomcat/conf⽬录下的server.xml⽂件的内容如下:复制代码代码如下:<U><?xml version='1.0' encoding='utf-8'?></U><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="erDatabase"description="User database that can be updated and saved"factory="ers.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="erDatabaseRealm" resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host></Engine></Service></Server>tomcat/conf⽬录下web.xml⽂件的主要内容如下:复制代码代码如下:<U><?xml version="1.0" encoding="UTF-8"?></U><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>jsp</servlet-name><servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class><init-param><param-name>fork</param-name><param-value>false</param-value></init-param><init-param><param-name>xpoweredBy</param-name><param-value>false</param-value></init-param><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- The mappings for the JSP servlet --><servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.jspx</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config><此处省略了mime-mapping的内容><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>现在我能想到的设置编码的地⽅也就只有这么多了,其他还有哪⾥需要设置编码?恳求指导。
JSP中文乱码问题及解决方法
中文 乱 码 问题 。原 因主 要有 两点 .第 一是 J P文件 和 文 变成 乱码 。 决方 法如 下 : S 解 在数 据库 连接 字符 串 中插 入 数 据 时 加 入 编码 字 符 集 Sr gU l " b : le e: tn r j c qsr r/ i = d s v / Jv aa本身 编译 时产 生的乱 码 问题 。第 二是 Jv aa程序 与
<fl r / t > i e
< itr ma p n > fl - p i g e
< h r a > i f e-n me
< r—p t r > * u l p t m> u l a t n / < r- a t e / e
文乱 码 的问题 。 能一 直 困扰 着 大家 。 可 那是 什 么原 因会
程 中 。 用 的编码 方式 与源 文件 的编码 方式 不 相 同 . 使 就 会 出现 中文 乱码
rso s. to t tye” x hr ; astG K” ep ne eC ne T p (t t tl hre= B ) s n e / ac ;
"B ) G K”;
3 . 数据库 中读取 的数 据是乱码 4从 3 常见 中文 问题及 其解 决方 法 、 当从 数 据 库 里 的 表 读 取 数 据 时 发 现 读 到 的 是 乱 J P动 态 网站开 发 中 。 S 出现 中文乱 码 主要 可 以分为 码 . 是 因为 数据 类 型是 vrh r和 t t 型造 成 中文 那 aca e 类 x 以下 4种 情 况 :S J P页面 显示 的 乱码 . 单 提 交 的 中文 乱码 . 到这种 问题 可 以用 如下 方法 解决 : 果是 v r 表 遇 如 a- 是 乱码 , 据库 连接 出现乱 码 。 数 从数 据 库 中读 取 的数据 ca 类 型 可把 它 设 为 bnr hr iay属 性 就 可 以解 决 中文 问 是 乱码 。 题 。 果是 t t 型 就要 用个 编码 转换 类来 处 理 , 如 e 类 x 方法 31 S . J P页 面里 的中文 内容显 示乱码 如下所 示 : 当 J P页 面 里 输 出 的 中 文 内 容 为 乱 码 。 原 因是 S p bi casC n etA o B I ul l ovr tB c s A
中文乱码的解决方法
中文乱码的解决方法在进行中文文本处理过程中,可能会遇到乱码的情况,这主要是由于使用了不兼容的编码格式或者在数据传输过程中出现了错误。
下面是一些解决中文乱码问题的方法:1.使用正确的编码方式2.修改文件编码如果已经打开了一个包含乱码的文本文件,可以通过修改文件编码方式来解决问题。
例如,在记事本软件中,可以尝试选择“另存为”功能,并将编码方式改为UTF-8,然后重新保存文件,这样就可以解决乱码问题。
3.检查网页编码当浏览网页时遇到乱码问题,可以在浏览器的“查看”或“选项”菜单中找到“编码”选项,并将其设置为正确的编码方式(例如UTF-8),刷新网页后,乱码问题通常会得到解决。
5.使用转码工具如果已经得知文件的原始编码方式但无法通过其他方式解决乱码问题,可以尝试使用一些转码工具来将文件以正确的编码方式转换。
例如,iconv是一款常用的转码工具,可以在命令行界面下使用。
6.检查数据传输过程在进行数据传输时,特别是在网络传输中,可能会出现数据传输错误导致中文乱码。
可以检查数据传输过程中的设置和参数,确保传输过程中不会造成乱码问题。
7.检查数据库和应用程序设置在进行数据库操作和应用程序开发时,也可能会出现中文乱码问题。
可以检查数据库和应用程序的设置,确保正确地处理和显示中文字符。
8.清除特殊字符和格式有时候,中文乱码问题可能是由于文本中存在特殊字符或格式导致的。
可以尝试清除文本中的特殊字符和格式,然后重新保存或传输文件,看是否能够解决乱码问题。
总结起来,解决中文乱码问题的关键是了解文件的编码方式,并确保在处理过程中使用相同的编码方式。
此外,要注意数据传输过程中的设置和参数,以及数据库和应用程序的设置,确保正确地处理和显示中文字符。
最后,如果以上方法仍然无法解决乱码问题,可以尝试使用专业的转码工具来转换文件的编码方式。
Java常见乱码原理及解决方案
Java常见乱码原理及解决方案String odsStr = "测试";String newStr = new String(odsStr.getBytes("GBK"), "ISO8859_1");首先需要说明一下我们经常用到的字符集,有ISO8859-1,GB2312,GBK,GB18030,UNICODE。
这里ISO8859-1字符集只包含英文字符,使用一个字节存储。
GB2312、GBK和GB18030字符集包含中文字符,他们都兼容ISO8859-1字符集,他们的字符存储格式是变长的,其中GB18030包含GBK,GBK包含GB2312。
UNICODE包含世界上所有国家的字符,UNICODE又分为UTF-8,UTF-16和UTF-32三种,UTF-8是变长字符集,它兼容ISO8859-1,即英文字符使用一个字节编码,而其他的字符使用2到4个字节编码,其中中文字符大部分都是使用3个字节进行编码,少量偏僻字使用4个字节编码,UTF-16统一都使用2个字节编码,它不兼容ISO8859-1,英文字符也使用两个字节,UTF-32统一使用4个字节编码,也不兼容ISO8859-1,可见UTF-16和UTF-32都比较浪费空间。
乱码问题的产生最根本的原因就是使用错误的字符集解码字节流或者将给定的字符串用错误的字符集编码成错误字节流造成的,例如”中文”两个汉字,如果用ISO8859-1字符集将其编码为字节流,因为这个字符集不支持中文,所以就会出错,输出结果为3f3f,其意义就是??。
再例如”中文”二字的GBK的字节流为d6 d0 ce c4,可是我们要是用不兼容的字符集去解码,例如用ISO8859-1或者UTF-8,这随后产生的字符串就是乱码,或者是其他的某个字符。
从开发Java程序到运行Java程序的过程中都存在着编码问题,所以要想避免乱码产生,就必须了解在其中任何时候的编码处理的情况。
中文乱码解决方案
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不用进行转码即可正确解码,获得正常的中文字符串。
如何解决表单提交的中文乱码问题
如何解决表单提交的中⽂乱码问题⼀:form在前台以post⽅式提交数据:浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的⼆进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开⽹页,浏览器就以哪个码表提交数据。
数据到达服务器后,数据(98 99)要封装到request中,在servlet中调⽤Request的getParameter⽅法返回的是字符串(“中国”),⽅法内部拿到数字后要转成字符,⼀定要查码表,由于request的设计者是外国⼈,所以默认查的是他们常⽤的ISO8859-1,这就是请求数据产⽣乱码的根源。
package com.yyz.request;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//以post⽅式提交表单public class RequestDemo extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//请求数据的中⽂乱码问题request.setCharacterEncoding("UTF-8");//客户端⽹页我们控制为UTF-8String username = request.getParameter("username");//获取数据正常,输出数据时可以查阅不同码表response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开PrintWriter out = response.getWriter();out.write(username);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}⼆:form在前台以get⽅式提交数据:get⽅式提交的数据依然是浏览器⽤什么码表打开就⽤什么码表发送。
解决中文乱码的几种解决方法(推荐)
解决中⽂乱码的⼏种解决⽅法(推荐)⾸先说明我的特殊情况:1. 前台jsp中,我使⽤的是 form post 请求,设置了 enctype="multipart/form-data" ,页⾯编码格式都是utf-82. 后台中,我使⽤的是commons-fileUpload组件,ServletFileUpload 解析form表单和⽂件,3. 设置 request.setCharacterEncoding("UTF-8");4. 设置了ServletFileUpload .setHeaderEncoding("UTF-8");5.Tomcat 的配置下⾯ server.xml 也已经设置了 URIEncoding="UTF-8";⾄此,按道理所有的格式都匹配上了,前后对应,解析出来的肯定是utf-8,但是经过formfield解析出来后任然是ISO-8859-1格式的编码,enctype="multipart/form-data" 会将数据以2进制的编码格式传递,因此我断定是 ServletFileUpload 解析时出了问题,多番查找,我的问题缺少了⼀步String formFieldValue = fileItem.getString("UTF-8");JSP和Servlet的六种中⽂乱码处理⽅法⼀、表单提交时出现乱码:在进⾏表单提交的时候,经常提交⼀些中⽂,⾃然就避免不了出现中⽂乱码的情况,对于表单来说有两种提交⽅式:get和post提交⽅式。
所以请求的时候便有get请求和post请求。
每种⽅式都有着不同的解决⽅法,之所以出现乱码,原因就在于get 请求时,其传递给服务器的数据是附加在URL地址之后的;⽽post的请求时,其传递给服务器的数据是作为请求体的⼀部分传递给服务器。
基于JSP的Web开发中文乱码问题研究
gtaa t ( sr a ”; e rme r ueN me) P e”
o t rn l ( 表 单输 入 u e Na 的值 :”+ u . itn ” p s r me
E l s 或 者My ci s q 由于 默认 的J P ci e p E l e ̄ p S 编码 格式 为 I O. 8 9 1 S 8 5 . ,所 以当打 开 由其 他编辑 器编 辑 的J P S 文 件 时会 出现乱码 。对此 只需 要更改一下 E l s或者是 ci e p
总结起来主要有以下几个方面 :
sthrc rn oig”b 32) e a t E cdn ( 2 ”; C ae g 1
r d rcPo t ” 4 3 > e ie t r= 8 4 ”/ -
( 下转9 页 ) 0
u eNa s r me+ ” b > < r %>
二 、J P S 开发 中文乱码 问题 表 现及解 决 方 案
在J P S 开发 过程 中出现乱 码的原 因可谓多种多样 。
24E l s或 MyE l s 中J P 件 中文 乱 码 。 在 . ci e p ci e S 文 p
c n e t y e V t ; h re=GB2 1 ”% > 32
< t l h m >
My cpe ̄ S 的默认编码即可 。其解决方式如下 : E l sq对JP i
A、My c se n o >Pe rne弹出属性窗 口 elp d w- rf ecs i Wi e
是乱码 。对于此 问题的解决方案如下 :
GBK编码项目解决中文乱码
GBK编码项⽬解决中⽂乱码前提:SSH框架下项⽬编码类型:GBK提交⽅式1:表单提交中⽂参数:String keyword=””;keyword=URLEncoder.encode(request.getParameter("keyword"), "ISO-8859-1");keyword=this.unescape(keyword);提交⽅式2:URL地址提交中⽂参数:String keyword=””;keyword=URLEncoder.encode(request.getParameter("keywords"), "GBK");keyword=this.unescape(keyword);使⽤的unescape(String str)⽅法如下public static String unescape(String src) throws UnsupportedEncodingException {StringBuffer tmp = new StringBuffer();tmp.ensureCapacity(src.length());int lastPos = 0, pos = 0;char ch;while (lastPos < src.length()) {pos = src.indexOf("%", lastPos);if (pos == lastPos) {if (src.charAt(pos + 1) == 'u') {ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);tmp.append(ch);lastPos = pos + 6;}else {ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);tmp.append(ch);lastPos = pos + 3;}}else {if (pos == -1) {tmp.append(src.substring(lastPos));lastPos = src.length();}else {tmp.append(src.substring(lastPos, pos));lastPos = pos;}}}String currentTmp = tmp.toString();// return currentTmp;return new String(currentTmp.getBytes("ISO-8859-1"),"GBK"); }。
JSP出现中文乱码问题解决方法详解
JSP出现中⽂乱码问题解决⽅法详解在介绍⽅法之前我们⾸先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中⽂乱码问题有如下⼏个⽅⾯:页⾯乱码、参数乱码、表单乱码、源⽂件乱码。
下⾯来逐⼀解决其中的乱码问题。
⼀、JSP页⾯中⽂乱码在JSP页⾯中,中⽂显⽰乱码有两种情况:⼀种是HTML中的中⽂乱码,另⼀种是在JSP中动态输出的中⽂乱码。
先看⼀个JSP程序:<%@ page language="java" import="java.util.*" %><html><head><title>中⽂显⽰⽰例</title></head><body>这是⼀个中⽂显⽰⽰例:<%String str = "中⽂";out.print(str);%></body></html>上⾯这个JSP程序看起来好像是在页⾯显⽰⼏句中⽂⽽且标题也是中⽂。
运⾏后在浏览器中显⽰如图所⽰原因在于没有在JSP中指定页⾯显⽰的编码,消除乱码的解决⽅案很简单上⾯代码中page命令修改成如下所⽰即可<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %><html><head><title>中⽂显⽰⽰例</title></head><body>这是⼀个中⽂显⽰⽰例:<%String str = "中⽂";out.print(str);%></body></html>再次运⾏乱码消失,原理就是向页⾯指定编码为GB2312,那么页⾯就会按照此编码来显⽰,于是乱码消失。
JSP技术中文乱码的原因及解决方法
JSP 技术中文乱码的原因及解决方法杨金花(西安铁路职业技术学院陕西西安710014)摘要:JSP 技术广泛应用于动态网页制作,但在应用中文字符时常常出现乱码。
以前有关JSP 技术中文乱码的研究,只是侧重于对常见的几种中文乱码情况分析,并从网页代码方面进行研究,然后给出相应的代码,缺少对造成中文乱码原因的研究。
本文从造成乱码的根本原因入手进行分析,以JSP 技术工作过程为线索,提出新的研究思路:从开发Java 程序时所涉及的开发环境以及使用的开发工具着手,研究字符的存储与编码的关系,将影响Java 中字符编码的原因分为内因和外因。
研究结果表明,在使用JSP 技术的过程中,中文字符的编码不仅在JSP 工作过程中,会发生编码的转换,而且会因开发环境以及使用开发工具不同,使存储在内存的编码形式发生转换,每种编码之间的转换没有规律。
本文系统地分析了Java 中字符编码的转换,最后针对JSP 中常见的中文乱码情况,给出了相应的解决方法。
关键词:字符编码;中文乱码;JSP 技术;Servlet 中图分类号:TP311文献标识码:A文章编号:1674-6236(2011)01-0025-03The reason and solution of Chinese garbled code in JSP technologyYANG Jin -hua(Xi ’an Railway Vocational Technical College ,Xi ’an 710014,China )Abstract:JSP technology is widely used in the production of dynamic web pages ,but the chinese characters in its application often garbled.Chinese garbled before the JSP technology research ,is focused on several common chinese garbled on the situation analysis ,and researches aspects of the code from the page ,and then gives the corresponding code ,the lack of research into the reasons causes the chinese garbled.This paper analyses from the real causes of the underlying cause garbled.JSP technology researches to the work process for the clues ,puts forward new research ideas :the development of Java programs involved in the development environment and start using the development tools ,storage and encoding of character relationships ,affecting the character encoding in Java is divided into internal and external reasons.The results show that use of JSP technology in the process ,the chinese character code in the JSP course of their work not only will happen coding of the convert ,but also because of development environment ,and use the development tools ,the code stored in memory in different forms.Between each code conversion is not the law.This paper systematically analysed the Java character encoding conversion ,in the end for the JSP common situation in the chinese garbled ,the corresponding solution was given.Key words:character encoding ;chinese garbled ;JSP technology ;ServletJSP ,也就是Java Server Page (Java 服务器网页),是目前市场上主流的分布式应用程序开发平台。
JSP中文乱码问题完全解决方案
request.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
}
public void destroy() {
} else {
this.enable = false;
}
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
四. 数据库操作中文乱码
在建立数据库的时候,应该选择支持中文的编码格式,最好能和JSP页面的编码格式保持一致,这样就可以尽可能减少数据库操作的中文乱码问题。同时在JDBC连接数据库的时候可以使用类似下面这种形式的URL。jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;useUnicode=true;characterEncoding=gb2312
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter implements Filter {
protected FilterConfig filterConfig;
protected String encodingName;
}
}
在web.xml中添加过滤器的配置如下:
<filter>
中文乱码问题解决方法
在Jsp文件问题时,中文乱码现象经常遇到,现将处理方法总结一下,供大家参考:(在各种编码方案中,UTF-8、GBK、GB2312都是支持中文显示的。
只是GBK比GB2312支持跟多的字符)一、JSP页面显示乱码Jsp文件页面显示乱码,这种情况比较好处理,在页面的Page指令加上如下一项就OK了:<%@ page contentType="text/html; charset=gb2312"%>注:如果是HTML页面显示乱码,则加上:<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 二、URL传递参数中文乱码当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法一如下:在参数传递时对参数编码,比如RearshRes.jsp?keywords=" + .URLEncoder.encode(keywords) 然后在接收参数页面使用如下语句接收keywords=newString(request.getParameter("keywords").getBytes("ISO-8859-1"),"UTF-8") ;解决方法二:修改tomcat的server.xml文件中URIEncoding。
<Connectordebug="0"acceptCount="100"connectionTimeout="20000"disableUploadTimeout="true"port="80"redirectPort="8443"enableLookups="false"minSpareThreads="25"maxSpareThreads="75"maxThreads="150"maxPostSize="0"URIEncoding="GBK"></Connector>这个方法主要针对从url中获取字符串的问题。
表单提交(GET或POST)中文乱码解决方案
表单提交(GET或POST)中文乱码解决方案对于表单中POST方式提交的数据,只要在接收数据的JSP或者Servlet中正确设置request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。
有些读者可能会问,那如何得到浏览器编码呢?上面我们提过了,在默认请情况下,浏览器编码就是你在响应该请求的JSP页面或者Servlet 中response.setCharacterEncoding设置的值。
对于URL提交的数据和表单中GET方式提交的数据,在接收数据的JSP中设置request.setCharacterEncoding参数是不行的,因为在Tomcat5.0版本以上中,默认情况下使用ISO- 8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码),而不使用该参数对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码)。
要解决该问题,应该在Tomcat的配置文件的Connector标签中设置useBodyEncodingForURI 或者 URIEncoding属性,其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding 参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false(Tomcat4.0中该参数默认为true); URIEncoding 参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)进行统一的重新编码(解码)的编码。
URIEncoding和useBodyEncodingForURI区别是,URIEncoding 是对所有GET方式的请求的数据进行统一的重新编码(解码),而useBodyEncodingForURI 则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。
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>这种乱码的原因是没有在页面里指定使用的字符集编码,JSP页面中出现了中文字符,而默认的ISO-8859-1字符集中无中文字符,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,在JSP页面中指定编码方式(gb2312),和浏览器解码方式设置相同,即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。
WPS技术支持解决文档中文字乱码问题
WPS技术支持解决文档中文字乱码问题在使用办公软件时,我们常常会遇到文档中文字乱码的问题。
这个问题不仅令人困扰,还会影响到我们工作的效率和准确性。
幸运的是,WPS技术支持团队提供了解决文档中文字乱码问题的有效解决方案。
本文将向您介绍WPS技术支持团队推荐的几种解决方法,帮助您轻松解决文档中文字乱码的难题。
一、检查字体兼容性字体兼容性是导致文档中文字乱码的常见原因之一。
如果您在WPS 中打开一个文档时,发现文字显示为乱码或方块,首先需要检查文档中所使用的字体是否与WPS软件本身兼容。
WPS技术支持团队建议使用WPS默认字体或常用的中文字体,例如宋体、黑体或微软雅黑,以确保字体兼容性并避免出现乱码问题。
二、选择正确的编码方式编码方式也是导致文档中文字乱码的一个重要因素。
当您在打开一个文档时,WPS软件会根据文档中的编码方式来解析文字信息。
如果编码方式不匹配,就会导致文字显示不正确或乱码。
在WPS中,您可以通过以下步骤来选择正确的编码方式:1. 点击菜单栏中的“文件”选项。
2. 在下拉菜单中选择“选项”。
3. 在弹出的窗口中,点击“打开”选项。
4. 在“编码”部分,选择正确的编码方式,例如UTF-8或GB2312等。
通过选择正确的编码方式,您可以解决文档中文字乱码的问题,并确保文字正常显示。
三、更新WPS软件版本有时,文档中文字乱码的问题可能是由于WPS软件版本过旧引起的。
WPS技术支持团队建议您及时更新WPS软件到最新版本,以获得更好的兼容性和稳定性。
WPS软件的更新通常包括修复已知问题和提供更好的性能,可以有效地解决文档中文字乱码的困扰。
四、使用在线转换工具如果您的文档中文字乱码问题仍然无法得到解决,WPS技术支持团队还提供了在线转换工具来解决这个问题。
您可以将乱码文档上传至在线转换工具,选择合适的转换选项,将文档转换为其他格式(如PDF),再重新下载并打开文档。
通过在线转换工具,您可以尝试改变文档的格式,从而解决文字乱码的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jquery.form 提交中文时乱码(GBK 乱码)的解决方案分类:jQuery2009-11-18 21:58 1758人阅读评论(0) 收藏举报在使用jsp开始时,一不小心就会出现中文乱码的情况。
通常可以使用如下方法解决:第一种解决方法:从jsp到servlet统一使用utf-8编码.全部使用utf-8编码能省去很多麻烦,但一点不足是utf-8编码对汉字是使用3-4个字节,会加大网络传输量。
第二种方法:1.jsp页面使用GBK2.使用servlet过滤器设置request.setCharacterEncoding("GBK");google一下就能找到很多怎么使用过滤器转换编码。
以上两种方法能解决大部分的乱码问题,特别是第一种方法,能解决使用ajax提交时的中文乱码问题。
如果采用第二种方法,那么在使用ajax提交表单时仍然会有中文乱码。
这是因为ajax方式提交时js使用的是utf-8的编码,过滤器使用gbk进行转码就不正确了,应该使用utf-8进行转码。
要解决这个问题,网上也有很多个版本,其中一个是我曾经采用的在客户端使用encodeURI,然后再在服务器端进行URLDecoder.decode,这种方案在偶尔处理一下中文是可行的,但是如果页面有大量数据录入,那么这种方案是不可行的。
有没有好的解决方法呢?在经过新一轮的google之后,还是找到了方法。
参考 /topic/157698?page=1。
原理就是根据httpheader中的内容来区分是ajax方式请求还是普通的请求。
在jquery1.2.6中,ajaxSettings默认设置contentType 为"application/x-www-form -urlencoded",在ajax方法中设置xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");,我们只要在servlet中根据这两个参数值来判断是不是通过xmlhttprequest发起的请求。
这里值得一提的是jquery 在提交form 时对参数进行了encodeURIComponent调用,参见param方法[javascript]view plainc opy1.jQuery .each( a, function(){2. s.push( encodeURIComponent(this .name) + "=" + encodeURIComponent( this .value ) );3.});1.<span class="hilite1">jQuery</span>2.3.4.5.6..each( a, function(){7. s.push( encodeURIComponent() + "=" + encodeURIComponent( this.value ) );8. });所以传给servlet的就是utf-8编码了,那么我们在过滤器中就必须使用utf-8进行转码。
对其中的过滤器做了下修正,在IE下和chrome下,request.getContentType()的值为"application/x-www-form -urlencoded",但是在firefox下,这个值为"application/x-www-form -urlencoded; charset=UTF-8",不是很明白ff为什么会是这个值。
filter代码如下:[java]view plaincopy1.package com .ajax.demo.action;2.3.import java.io.IOException;4.5.import javax.servlet.Filter;6.import javax.servlet.FilterChain;7.import javax.servlet.FilterConfig;8.import javax.servlet.ServletException;9.import javax.servlet.ServletRequest;10.import javax.servlet.ServletResponse;11.import javax.servlet.http.HttpServletRequest;12.import javax.servlet.http.HttpServletResponse;13.14.public class AjaxPostFilter implements Filter {15.16.private static final String IE_CONTENT_TYPE = "application/x-www-form -urlencoded" ;17.private static final String FF_AJAX_CONTENT_TYPE = "application/x-www-form -urlencoded; charset=UTF-8" ;18.private static final String XMLHTTP_REQUEST = "XMLHttpRequest" ;19.private static final String AJAX_CHARACTER_ENCODING_UTF8 = "UTF-8";20.21.public void destroy() {22.// TODO Auto-generated method stub23.24. }25.26.public void doFilter(ServletRequest servletRequest,27. ServletResponse servletResponse, FilterChain filterChain)28.throws IOException, ServletException {29. HttpServletRequest request = (HttpServletRequest) servletRequest;30. HttpServletResponse response = (HttpServletResponse) servletResponse;31. String requestedWith = request.getHeader("x-requested-with" );32. String type = request.getContentType();33.if (XMLHTTP_REQUEST.equals(requestedWith)&& (FF_AJAX_CONTENT_TYPE.equals(type)34. ||IE_CONTENT_TYPE.equals(type))) {35. request.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);36. response.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);37.// request.getParameterMap();38. }39. filterChain.doFilter(request, response);40.41. }42.43.public void init(FilterConfig arg0) throws ServletException {44.// TODO Auto-generated method stub45.46. }47.48.}1.package <span class="hilite6">com</span>2.3.4.5.6..ajax.demo.action;7.8.import java.io.IOException;9.10.import javax.servlet.Filter;11.import javax.servlet.FilterChain;12.import javax.servlet.FilterConfig;13.import javax.servlet.ServletException;14.import javax.servlet.ServletRequest;15.import javax.servlet.ServletResponse;16.import javax.servlet.http.HttpServletRequest;17.import javax.servlet.http.HttpServletResponse;18.19.public class AjaxPostFilter implements Filter {20.21.private static final String IE_CONTENT_TYPE = "application/x-www-<span class="hilite2">form</span>22.23.24.25.26.-urlencoded";27.private static final String FF_AJAX_CONTENT_TYPE = "application/x-www-<span class="hilite2">form</span>28.29.30.31.32.-urlencoded; charset=UTF-8";33.private static final String XMLHTTP_REQUEST = "XMLHttpRequest";34.private static final String AJAX_CHARACTER_ENCODING_UTF8 = "UTF-8";35.36.public void destroy() {37.// TODO Auto-generated method stub38.39. }40.41.public void doFilter(ServletRequest servletRequest,42. ServletResponse servletResponse, FilterChain filterChain)43.throws IOException, ServletException {44. HttpServletRequest request = (HttpServletRequest) servletRequest;45. HttpServletResponse response = (HttpServletResponse) servletResponse;46. String requestedWith = request.getHeader("x-requested-with");47. String type = request.getContentType();48.if (XMLHTTP_REQUEST.equals(requestedWith)&& (FF_AJAX_CONTENT_TYPE.equals(type)49. ||IE_CONTENT_TYPE.equals(type))) {50. request.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);51. response.setCharacterEncoding(AJAX_CHARACTER_ENCODING_UTF8);52.// request.getParameterMap();53. }54. filterChain.doFilter(request, response);55.56. }57.58.public void init(FilterConfig arg0) throws ServletException {59.// TODO Auto-generated method stub60.61. }62.63.}web.xml配置,我用的是struts[xhtml]view plaincopy1.<filter>2.<filter-name>ajaxEncodeFilter</filter-name>3.<filter-class>com .ajax.demo.action.AjaxPostFilter</filter- class >4.</filter>5.<filter-mapping>6.<filter-name>ajaxEncodeFilter</filter-name>7.<url-pattern>*.do </url-pattern>8.</filter-mapping>9.<filter-mapping>10.<filter-name>ajaxEncodeFilter</filter-name>11.<url-pattern>*.jsp</url-pattern>12.</filter-mapping>1.<filter>2. <filter-name>ajaxEncodeFilter</filter-name>3. <filter-class><span class="hilite6">com</span>4.5.6.7.8..ajax.demo.action.AjaxPostFilter</filter-class>9. </filter>10. <filter-mapping>11. <filter-name>ajaxEncodeFilter</filter-name>12. <url-pattern>*.do</url-pattern>13. </filter-mapping>14. <filter-mapping>15. <filter-name>ajaxEncodeFilter</filter-name>16. <url-pattern>*.jsp</url-pattern>17. </filter-mapping>这个filter应该在你的EncodeFilter之后,RoyMax说要在之前,我试了下是不行的。