jsp读取数据库中文乱码问题
jsp页面传值中文乱码 网页乱码 jsp过滤器过滤乱码等乱码处理办法
![jsp页面传值中文乱码 网页乱码 jsp过滤器过滤乱码等乱码处理办法](https://img.taocdn.com/s3/m/1125a1601ed9ad51f01df21f.png)
一、jsp页面间传值中文乱码问题解决办法<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <form action="b.jsp">name:<input type=text name=name><input type=submit></form>b.jsp页面内容:<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <%String name=request.getParameter("name");%><body><%=name%></body>现象:中文乱码,比如“??????”解决方法如下:方法一:1. 在b.jsp中把pageEncoding="GB2312"改为pageEncoding="ISO885Array-1"虽然这样b.jsp页面显示的内容还是乱码,但是不是那种“??????”的乱码,而是一些特殊字符2. 然后在浏览器中查看菜单中修改成GB2312的编码,这时乱码就显示中文了。
3. 但是这种方法是不可行的。
方法二:( 已经验证可行)1. 在b.jsp中把String name=request.getParameter("name");修改为String name=new String(request.getParameter("name").getBytes("ISO-885 Array-1"),"GB2312");2. 这时再在页面上显示,则就是中文了。
中文乱码问题
![中文乱码问题](https://img.taocdn.com/s3/m/95081e8cbceb19e8b8f6baed.png)
数据库以及JSP页面乱码问题的处理博客分类:数据库.数据库中和JSP页面中中文显示乱码问题,纠结了我很久。
令我兴奋的是,现在已经解决了。
刚开始测试时,因为我是在MySQL那个黑框框里面中插入中文数据的,所以没有出现乱码。
然而,当我用JSP页面去测试时,情况就不同了。
我编写的JSP页面的功能很简单,当输入的用户名和密码都正确时,则将数据库中所以用户的信息用表格显示出来,反之,则提示出错信息。
刚开始,我没测试向数据库中插入数据,而是用户名和密码登录,当我输入中文时,到数据库中查找时,查找成功了,但是显示到JSP页面上的信息却是乱码。
当时,我觉得很奇怪,数据库中有该用户名,而且查找也成功了,为什么显示的却是乱码。
然后,我就在向数据库中查询用户名和密码的方法中,打印了提交的用户名和密码,控制台输出的却是乱码。
于是,我就想:提交的是乱码为什么能与数据库中显示的不是乱码的中文能够匹配,觉得可能是数据库中的字符编码有问题?后面,我在Servlet类里添加了一条语句:Java代码1.request.setCharacterEncoding("gbk");request.setCharacterEncoding("gbk"); 页面显示时,却提示出错信息:“帐号或密码错误”,而控制台打印的信息不是乱码。
这样,我就更加肯定是数据库中的字符集有问题了。
于是,我将MySQL安装目录下的文件my.ini中的Java代码1.default-character-set=latin1default-character-set=latin1 改为了Java代码1.default-character-set=gbkdefault-character-set=gbk测试之后,还是乱码。
然后,我就想测试下:JSP提交的信息插入到数据库中,是否会出现乱码。
(都是针对输入中文而言)。
果不其然,插到数据库中的信息全是乱码,而且之前在MySQL 平台下输入的中文字符也变成了乱码,害得我又将其改回去了。
JSP+MySQL中文乱码问题post提交乱码解决方案
![JSP+MySQL中文乱码问题post提交乱码解决方案](https://img.taocdn.com/s3/m/d6adc759ce84b9d528ea81c758f5f61fb7362896.png)
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中文乱码问题及解决方法
![JSP中文乱码问题及解决方法](https://img.taocdn.com/s3/m/65a90abe65ce0508763213dc.png)
中文 乱 码 问题 。原 因主 要有 两点 .第 一是 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
JSP中汉字编码时出现“乱码”的情况及具体解决方案
![JSP中汉字编码时出现“乱码”的情况及具体解决方案](https://img.taocdn.com/s3/m/1618b9186edb6f1aff001f31.png)
l4 1
F。 RTu E w 。 R D 。1 。
、 一
关键 词 : J ; S 汉字编 P 码;乱码 问 ; 题 解决
、
集 是几 乎所 有的 中 文 系统和 国际 化 的软 件都 时 ,可以先用数据库 管理系统提供的管理功能 支 持的 中 文字符 集 ,这 也是 最 基本 的 中文字 检查其中的中文数据是否正确。 符集。其编码范 围是高位0 1 0 e xa xf ,低位也 四 J 服务器对中文的支持程度 SP 是 O a l xe x l_ f;汉字从 O b a _ 0 x 0 l开始,结 束于 支 持 J 的 服 务 器 有 很 多 ,这 些 服 务 器 对 SP 0 7 e; xf f 中文的支持 度 又各不相同 ,例如RE N,其 SI G BK 是 GB 3 2 0 的扩 展,是 向 兼 对中文的 支持程度相当的好,而T0MC 对 2 1 8 AT 容的。它包含了 2 9 2个汉字,其 编码范 围是 中文的支持程 度一般。所以 ,在J 编程过程 00 SP 0 8 4 - xe x 10一 f ̄,剔除高位 0 8 的字位。其所 中,要注意J P E 0 x0 S  ̄ 务器对中文的支持程度。 有字符郜 町以一对 一 映射到 Uncd .。 i e2 0 o 找 到 r乱码产生的原因 ,我们在实际编程 GBl0 0 0 0GBK2 8 3 2 0 ( K)在 GBK 的基 过 程中只要综合应用编 程方法 ,就可以解决乱 础 上进 步扩展 _ 宁 ,增加 了藏 、蒙等少数 码的 问题 。 『 汉 民族的宁形。GB 2 从根本上解决 了字位不 K K 实例分析 够 ,宁 形不足的 问题 。它并没有确定所 有的字 下面 以 ・ 个具体的例子来 分析J P S 中乱 码 也 就 足 所 峭的 圈际 化 (lN) 。 各 种 语 言信 启、 形 ,只是规定 了编码 范围 ,留待以 后扩 充。编 解 决 的 方 法 。 【8 BK 兼容 ;四 测 试 平 台 l : 被进一步规 范为 L c l 信息 。处理的底层字 码是变 的 ,其二字节部分与 G o ae ND 20 T MYS 4 QL 字节部 分是扩宽的字形 、字位 ,其编码 范围是 W I OW ¥ 0 0} OM CAT{ 符集变成 了几 包含 了所有字形的 Unc d 。 i e o x l xf 、 l I x 0 0 3 、三 字 测 酞 平 台 2 : 现在大部分具 有 国际化特征 的软件核心t= 首字 节 0 8 O e ¨字 节O 3 x 9 } 节 0 8一0 f、四字 节0 3 — x 9 x i xe x 0 0 3。 W I OW S 0 0 RE I M Y Q 4 ND 2 0 + S N+ S L 符处理都足以 Un c d 为基础的 , 软件运 i e o 所 以 在J P , 管是 从 Uni O e 中 S c d 住 测 试 台 l 无论 怎么 设 置数 据 库 的 下 行时根据 当时的 L cl/ n / o e a e设置 oae I g C d p g a t 编码还是Byt >Un C de 存在问 c c di. 以及 网页的编码 ,都无法 正常显示 e iO 都 n o Ig n 确定桐应的本地字 符编码 设置 ,井依此 处理本 >BY e io e ye { l 台2F,只要 设置M YsQL 地 宁倚 。i处理过程中需要 实现 U io e 和 题 。从Un c d 转为B t ,如果 目标代码集不 f文 ,而 测 吠、 芏 ncd x3 。这 的e od ng,就 町以正常 示中文 。如 果在 nc i 本地宁 ? =的相 互转换 ,甚或以 Un c d 为 存 存对 应的 代码 ,则得 到的 结 果是 0 f _策 1 : io e 32 下需要 示 【 文 ,那 么除 了要 设置 } 1 中f 的两个 不同本地 字?= u 】 = 1 集的相互转换 。这种 是 因为GB2 l 符号 区中的一 些符 号被映 射到 测试 平台 1 些公 共的 符 号编 码 , 由于这 些 符号 出现 任 MY QIt cd, S %n o ig,对数据 库的读写要进行转 1 1 方式 网络环境 i v 被进一 步延伸 ,任 何网络两 S 89 或其它S S BC 字符集中 ,故它们征 换 ,转换代吗如 : 端 的宁衍信息也需要 根据 字符集的设 置睾 换成 I O 8 5 l 专 Un c d 中编码比较 靠前 ,有一 些其有效 位只 /o e p bi tig u l S r Ch n e d (tig s c n a g Co eS rn t) r 可接受的内容。 c pto 位 hr w OEx e i n J v 语 占内部 是用 Un c d 表 示宁符 仃8 ,和汉 字的 编码 莺叠 ,导 致 显示 乱码 。 t o s I aa io e ye i e o ye 的 ,遵守 Unc d V . 。J v 程序无论是 从B t转 为Unc d , 如果B t标识的字符在 io e 2 0 a a rt n c em’ n w S rn (t. eBye (io ti gsrg t ts” s x fd 从 / 丈件 系 统 以 宁 符 流 读 /写 文 件 ,还 是 往 源代码集 不存 ,则得到的结果是O f f ,同 往 8 5 l ) BK” ; 89 ¨, G ) 样存在编码 问题 。 URL 连接 ITMI j I 信息 ,或从 URL 连接 实际编程中 ,J P S r l 程序得到错误 S / e ve t 读取 参数值 ,都会有字符 编码的转换 。这 样做 N d I 题斛决 ! LS ̄ J 虽然增加 r 编程的复 杂度 ,容易引起混淆 ,但 的汉中信息 ,往往是这 两个过程的叠加 ,有时 甚 至是两个过程 叠加后 反复作用的结果 。 JP s 中汉宁编码时 “ 乱码”的问题一直是 却是符合 际化的思想的 。 三 、数据库 自身编码的方式。 JP S 中编 程值得注意的 问题 ,解决的方案也 有 从理论 来说 ,这些根据宁符集设 置而进 在J 编程过 程 【 ,不可避 免要和数据库 很多 。通常需要 考虑的就是从以上三 个方 面找 P s { l 行的卞 符转换 不应 该产生太 多问题 。而事 实是 S q 对症 下药 。 J P 的中文 s 由l F 成用程竹: 的实际运行环境 不【 ,uniO 打 交道 。所 以数据库 自身的编码 方式对J P , 到乱码产 生的原 , 百 I C de 中文的显示起 着决定性 作片。如果在 中文在 写 e c dn 并没有想像中那么复杂,在编程过程 1 n o ig 和 各个本地字符集的 补充、完善 ,以及 系统 或 n 应 用程序 寅现的不规范 ,转码时 出现的问题时 入数据库过程 中 已是乱码 ,那显示的数据毫无 中只要注意卡 是问题就 町避免问题现象的出现 。 交换用的字符编码集 ,如美国的 A C I S I ,中国 的 GB 3 2 8 ,日本的 J 等 ,作 为该 家/ 2 1~ 0 I S 区域 内信启、 处理的基 础,有着统一编码 的重 要 作用。字符编码集按长 度分 为 S BCS ( 字节 字 符集 ) ,DBCS ( 字节字符集 )两 人类。 双 早期的软 什 ( 尤其是操作 系统) ,为 了解决 本 地 符 信息 的计算机处理 ,出 了各种本地 化 版奉 (JO IlN),为 了区分 ,引进 了 LANG, C d p g 等概念 。但是 山于各个本地 字符集 oea e 代码范 围圣毳 ,相 互问信息 交换 困难 ;软件 各 个本地化版本 独立维护成本较 高。因此有必 要 将 本地 化工 怍中 的共性 抽 取 出来 ,作 一 处 致 理 ,将特 州的 本地 化处理内容降低 到最少。这
jsp页面传值中文乱码问题解决
![jsp页面传值中文乱码问题解决](https://img.taocdn.com/s3/m/7c2048e75ef7ba0d4a733bbe.png)
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传递,如果容器没有做配置修改,程序则需要手工进行编码转换
存取数据库乱码
•解决方案:在数据库连接参数中设置编码值。
如何解决乱码问题总结
![如何解决乱码问题总结](https://img.taocdn.com/s3/m/546abbf37c1cfad6195fa782.png)
</filter-mapping>
3.URL中的中文问题
对于直接通过在URL中传递中文参数,如“http://localhost/a.jsp?str=中文”这样的get请求,在服务端用request.getParameter("name")时返回的往往是乱码。按以上的做法设置Filter没有用,用request.setCharacterEncoding("gbk")的方式,仍然不管用。
httpServletResponse.setContentType("text/html;charset=gbk")),最好同时在JSP页面的head部分加上<meta http-equiv="Content-Type" content="text/html;charset=gbk">
·在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方式:
<%
String str="中文";
byte[] tmpbyte=str.getBtyes("ISO-8859-1");
str=new String(tmpbyte);
out.print(str);
%>
2.获取表单提交的数据时的中文乱码问题
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
JSP中文乱码问题及解决方法
![JSP中文乱码问题及解决方法](https://img.taocdn.com/s3/m/e875b9c90c22590102029d7a.png)
电 脑 学 习
第6 期
JP中文乱码 问题及解 决方法 S
贾素 来 ’
摘 要 :在简要介绍常用字符集的基础上给出了JP中文乱码问题的原因 。 S 并给出了相 应的解决方法 。
关键 词 : JP S Srl ev t e 中文 乱 码 字符 集
以被 正确 地 处 理 , 码 如 下 : 代
Sr g n me r q et e a a tr " sma t n a = e u s g t rme (u e me ) i . P e Sr g n me = e t n n m .e ye "S - 8 9 1 ) ” B t n a 2 n w Sr g( a eg t t i i B s(I O 8 5 - . K ) G
2 J P中文 乱码 的解 决方 法 S
21JP源 文 件 在 编 译 过 程 中 的编 码 转 换 . S
() 3 配置 t ct o a 解决中文乱码 问题。表单如 果 以 ps m ot
方 式 提 交 中 文 参 数 , 以 使 用 ft 解 决 中文 乱 码 问题 。 在 可 ie lr
<%@p g c ne ty e ”e V t ;h re=G a e o tntp = tx hmlc as t BK" %>
最后在项 目的 w bx l e . 文件 中添加如下几行代码 : m
< l r fh r n me S t aa tr ed n  ̄f e-n m> i e f t >< ie - a > eCh r ceEn o ig dtr a ' < h r cas d esS t aa tr cd n Fle<fhe-ea s i f e - ls>ftr.eCh rceEn o ig i r/i r ls > t
JSP中文乱码问题解决办法
![JSP中文乱码问题解决办法](https://img.taocdn.com/s3/m/7a6f41f9fab069dc50220101.png)
JSP中文乱码问题解决办法当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊处理。
常见的几种字符集编码:⏹ASCII码:不支持中文⏹ISO-8859-1:不支持中文⏹GB2313、GBK:支持中文⏹Unicode:支持中文⏹UTF-8:支持中文在解决JSP中文乱码问题前,弄清以下几点:(1) windows平台采用的默认字符集编码是:GBK(2) IE浏览器默认采用UTF-8字符集编码方式发送Http请求。
(3) Tomcat在处理Get请求时,永远采用ISO-8859-1编码;Tomcat在处理Post请求时,默认采用ISO-8859-1编码;如果进行了如下设置request.setCharacterEncoding(“GBK”),则采用GBK编码。
可以使用如下几种方式解决JSP中文乱码问题。
1、方法一:调用自定义的转换函数<%@page contentType="text/html;charset=GB2312"%><%!public String getStr(String s) {String str = s;try {byte[] b = str.getBytes("ISO-8859-1");str = new String(b);return str;} catch (Exception e) {return str;}}%>使用内置对象request将获取的数据,使用ISO-8859-1进行重新编码,并保存到一个字节数组中,然后调用new String()方法,以GBK方式将这个字节数组构造出一个新的字符串,这个新的字符串就是我们想要的结果。
适用于以下三种情况:(1) 以Get方式提交表单,提交的数据中包含汉字字符。
(2) 以Post方式提交表单,提交的数据中包含汉字字符。
中文乱码
![中文乱码](https://img.taocdn.com/s3/m/ad3cf5210722192e4536f637.png)
4.创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码
5.用户提交JSP页面的编码与显示数据的JSP页面编码不一致,就肯定会造成JSP页面乱码.
如用户输入资料的JSP页面是big5码, 显示用户输入的JSP页面却是gb2312,这种100%会造成JSP页面乱码
要解决JSP乱码,首先就要了解JSP乱码的原因
1.架设服务器安装MYSQL时的会让你选择一种编码,如果这种编码与你的网页不一致,可能就会造成JSP页面乱码
2.在PHPMYADMIN或mysql-front等系统 创建数据库时会让你选择一种编码,如果这种编码与你的网页不一致,也有可能造成JSP页面乱码
我们一一来表达:
1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题
2.修改数据库编码,如果是数据库编码不正确: 可以在phpmyadmin 执行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8
3.修改表的编码:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8
4.修改字段的编码:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
基于JSP的Web开发中文乱码问题研究
![基于JSP的Web开发中文乱码问题研究](https://img.taocdn.com/s3/m/31dbf06a0b1c59eef8c7b4fa.png)
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
是乱码 。对于此 问题的解决方案如下 :
JSP出现中文乱码问题解决方法详解
![JSP出现中文乱码问题解决方法详解](https://img.taocdn.com/s3/m/d48e981f53ea551810a6f524ccbff121dd36c5f3.png)
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 url中中文参数的乱码解决
![jsp url中中文参数的乱码解决](https://img.taocdn.com/s3/m/2941ff050740be1e650e9a4d.png)
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc(很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080/servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串"%xy" 表示,其中xy为该字节的两位十六进制表示形式。
我这里说的可能不清楚,具体介绍可以看下.URLEncoder类的介绍在这里。
了解了URL encode的过程,我们能看到2个很重要的问题,第一:需要URL encode的字符一般都是非ASCII的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get方法提交数据的编码方式。
JSP技术中文乱码的原因及解决方法
![JSP技术中文乱码的原因及解决方法](https://img.taocdn.com/s3/m/b342d4eaf8c75fbfc77db266.png)
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中文乱码问题完全解决方案
![JSP中文乱码问题完全解决方案](https://img.taocdn.com/s3/m/d0707028cfc789eb172dc876.png)
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>
中文乱码问题解决方法
![中文乱码问题解决方法](https://img.taocdn.com/s3/m/d2b14119ff00bed5b9f31d68.png)
在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中获取字符串的问题。
JSP中文乱码的产生原因及解决方案
![JSP中文乱码的产生原因及解决方案](https://img.taocdn.com/s3/m/081d23781711cc7931b71609.png)
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"%>,就可以消除乱码了。
中文乱码问题终极解决方案
![中文乱码问题终极解决方案](https://img.taocdn.com/s3/m/c534ee4b336c1eb91a375d55.png)
中文乱码问题终极解决方案在开发过程中我们会遇到各种各样的中文乱码问题,极为烦恼,现将开发过程中的几点中文乱码处理问题总结如下,大家共勉。
注:以下编码设置以utf-8为例一,在做web开发中,乱码主要分为:数据库乱码,jsp页面乱码,服务器乱码3部分下面我们以用户注册中文名字为例说明用户提交注册信息,登陆后显示注册名时,信息的传递流程。
用户在jsp页面输入“张三”中文注册,“张三”这条消息通过服务器,传给后台,后台调用方法,将张三插入数据库,当用户注册成功并登陆,后台类调用相应方法,读取数据库中的相应信息,将信息从后台通过服务器传回到界面,进行显示。
这期间主要是jsp页面,服务器,数据库之间的交互,中文乱码问题也是在这3个地方出现。
所以在出现中文乱码问题后,应进行跟踪,先判断出是那个过程出现了乱码。
1)跟踪过程在开发创建工程时,要先确保你的工程编码,工程内所有的文件编码全部都是"UTF-8"编码2)如何判断是那一部分出现了乱码首先,用户在界面输入的是中文,在你的后台类中药request界面穿过类的信息,讲你传过来的信息打印,如果是乱码,则说明乱码可能的产生地方为你的jsp页面传送的时候就已经是乱码,或者是经过服务器的时候发生的乱码3)JSP页面乱码解决方案在jsp页面设置<%@page pageEncoding="utf-8"contentType="text/html;charset=utf-8" %>这样jsp页面的到的数据都会以UTF-8的编码去进行传递4)服务器乱码解决方案如果这个时候后台接收到的数据还是乱码,那么说明是在传输过程中变成乱码的,那么设置服务器的编码,以TOMCAT服务器为例。
打开服务器的安装包->conf文件夹->server.xml<Connector port="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="utf-8"/>设置成这个样子的如果这个时候还是乱码,那么在你的后台类,打印输出语句之前,里要写上这样的一句代码,request.setCharacterEncoding("utf-8");当要将数据响应回界面以后,需要response.setContentType("text/html;charset=utf-8");执行完上述步骤之后,数据要插入到数据库了,如果你从数据库中读取出来的是乱码,那么毫无疑问,数据是在你的数据库中变成乱码的5)mySQL数据库乱码解决方案数据库乱码是中文乱码中最麻烦的一项(笔者是这样认为的,开发中各种的乱码也确实如此)。
jsp中文传参乱码问题
![jsp中文传参乱码问题](https://img.taocdn.com/s3/m/a5192b0776c66137ee0619f7.png)
String title= request.getParameter("title");
title= new String( title.getBytes("iso-8859-1"), "UTF-8");
System.out.println(title);
}
二、为编码为UTF-8的JSP页面传参,对于中文乱码的解决分为两种情况:
1.通过GET方式传参,通过new String(request.getParameter("").getBytes("ISO-8859-1"),"UTF-8"); 的方式转换为需要的编码,如UTF-8等。
一、在请求页面的请求参数需要用encodeURI进行转码,然后在接收请求的页面需要进行字符集转换。
本例中的请求和接收页面的字符集都是UTF-8:
1.请求的JSP页面用JavaScript的encodeURI()方法将参数转码:
function toView(param){
var encodeparam = encodeURI(param) ;
window.location.href="/naias/advAna_form.do?method=showDetail&title="+encodepara进行字符集转换:
public ActionForward excute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
jsp读取数据库中文乱码问题
这个问题是从项目中设计数据库和操作数据库的人不同而造成的。
所用的数据库
是sybase,设计时把数据类型设计为nvarchar了,如果是中文,读取出来就会得到乱码。
我试了好多方法还是不行,最后无奈,只好将数据类型改为varchar了。
所以在此总结一下中文乱码问题。
一、JSP与页面参数之间的乱码
JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码
类型和系统默认的编码类型不一致,很可能就会出现乱码。
解决这类乱码问题的
基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding
("gb2312")。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置
response.setContentType("text/html;charset=GBK")或
response.setContentType("text/html;charset=gb2312")解决。
二、Java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的
乱码问题比较明智的方式是直接使用unicode编码与数据库交互。
很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。
其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动:
jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
三、Java与文件/流之间的乱码
Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。
其中FileInputStream和FileOutputStream是基于字节
流的,常用于读写二进制文件。
读写字符文件建议使用基于字符的FileReader和
FileWriter,省去了字节与字符之间的转换。
但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现码。
在这种情况下,建议使用FileReader和FileWriter的父类:
InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。