这篇“JavaWeb乱码问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaWeb乱码问题怎么解决”文章吧。
首先,先明确两个问题,为什么会出现乱码?我们在编写web应用时什么时候会出现乱码?
第一个问题:很多初学者会发现,我们在自己的客户机上编写的web应用程序时,明明是正常的汉字,但是发布到服务器上访问的时候浏览器就会看到乱码。
出现这种问题的原因是:通常中文windows系统中系统默认的编码是GBK(大家可以进入DOS窗口下,输入chcp进行查询),而我们编写web应用时,myeclipse默认的编码通常是iso8859-1,浏览器也会有自己的编码选择。。。这么多地方使用的不同编码,如果两个编码不对口,当然就会出现乱码。
第二个问题:出现乱码的地方可以归结为三类:1.基本jsp页面显示乱码,2.表单提交乱码,3.数据库乱码
下面为大家依次讲解:
这种情况比较简一般只有初学者会出现,原因是因为jsp页面保存,转换时的编码与浏览器解析的编码不一样。这里涉及到三个解决方案
(1)我们都知道,jsp就是servlet,jsp会转换成servlet之后转换为相关的java代码再发给客户端。
那么jsp中就需要有语句可以控制jsp是以什么编码转换为servlet的。上述编码就是控制,jsp以UTF-8的编码方式保存,也就是说以UTF-8的编码方式转换成servlet。
(2)熟悉HTTP协议的朋友都不陌生这一句代码,charset="UTF-8",就是设置响应头编码方式为UTF-8。
(3)同上一句代码,只不过这一句使用HTML控制浏览器解析方式。
示例:
我们在一个简单的jsp页面中写下这样的代码,页面中有汉字,却默认pageEncoding="iso8859-1"
<%@ page language="java" import="java.util.*" pageEncoding="iso8859-1"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="encoding.jsp" method="get"> username:<input type="text" name="name" /><br> 性别:<input type="text" name="sex" /><br> <input type="submit" value="submit" /> </form> </body></html>
页面显示:
HTTP报文请求头:
大家只要按照上述修改响应时的默认编码即可。
我们在使用表单提交中文时也会出现乱码,原因就是Tomcat服务器内部编码默认是iso8859-1,Tomcat会以编码的缺省方式利用iso8859-1来解析中文。
表单get方式提交时,服务器会用默认的编码对提交的数据进行解析,并添加到url后面传到下一个页面。
解决方法:在Tomcat 服务器的server.xml文件中进行配置,在Connector节点中加入useBodyEncodingForURI="true" URIEncoding=”UTF-8”,这样接收页面就会利用UTF-8进行解码了。
表单post方式提交时,提交的数据不再加入到url中,我们可以在web应用中添加一个servlet过滤器来设置编码统一(servlet过滤器会在访问设置的相关url之前执行)。
过滤器相关代码:
public class ConvertEncoding implements Filter { private String encoding; @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding(encoding);//设置请求编码 resp.setContentType("text/html;charset="+encoding);//设置响应编码 chain.doFilter(req,resp); } @Override public void init(FilterConfig config) throws ServletException { this.encoding = config.getInitParameter("encoding");//读取默认编码 } }
这样我们会发现即使是post方式提交的数据,也不会出现乱码情况。、
对于大多数数据库的JDBC驱动程序,在Java程序和数据库之间传递数据都是以ISO8859-1为默认编码格式,所以,在程序中向数据库存储包含中文的数据时,驱动程序受限把程序内部Unicode编码格式的数据转换为ISO8859-1编码,然后传递到数据库中,如果要解决数据库乱码问题,最简单的就是更改数据库默认编码格式。
以上就是关于“JavaWeb乱码问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。