乱码解决大全
原创 随风梦想 最后发布于2018-03-15 11:37:10 阅读数 8092
收藏
发布于2018-03-15 11:37:10
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
这里先写几个大家容易搞混的编码设置代码:


在jsp代码中的头部往往有这两行代码
pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,
否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用
默认的ISO-8859-1。
还有一种是在服务端接受参数的编码:


response和request的setCharacterEncoding 区别
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值。
指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码。值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter()。而且,该指定只对POST方法有效,对GET方法无效。分析原因,应该是在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析提交内容,setCharacterEncoding()自然就无效。
get需在Tomcat的server.xml中的:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
URIEncoding="GBK" />
)加入URIEncoding="GBK",解决get请求乱码问题response.setContentType("text/html;charset=gb2312"):是设置页面中为中文编码。即以哪种编码返回给客户端。
前者是设置动态文字(参数,数据库),后者设置页面静态文字
response.setContentType指定 返回给客户端的编码,同时指定了浏览器显示的编码.
response.setCharacterEncoding设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用response.setCharacterEncoding指定的编码格式覆盖之前的设置.与response.setContentType相同的是,调用此方法,必须在getWriter执行之前或者response被提交之前.
JSP和Servlet的六种中文乱码处理方法
一、表单提交时出现乱码:
在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。所以请求的时候便有get请求和post请求。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。
1、客户端的get请求
get提交时, 容器以容器的编码 来编码 如果用的tomcat 默认的编码是iso-8859-1 在server.xml里面设置编码 或者
代码如下
1
2
|
String name = request.getPara...( "name" );
String strName = new String(name.getByte( "iso-8859-1" ), "GBK" );
|
对于不同的请求方式,解决乱码的问题也是不一样的,对于客户端的get请求来说,服务器端处理要想不出现乱码,解决这个问题稍微复杂一些,需要用到String类型的构造函数,其中的一个构造函数就是用指定的编码方式去解码,一般都用“UTF-8”的方式。只要在服务器端将请求得到的参数重新构造成一个字符串就行了。
经过构造之后,客户端输入中文,且表单时get请求的情况下,str就变成了中文了。
2、客户端的post请求
对于客户端的post请求来说,处理乱码的问题就比较简单了,因为请求的数据时作为请求体的一部分传递给服务器的,所以只要修改请求内的编码就行了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:request. setCharacterEncoding(“UTF-8”);这样用户在服务器端获取到的中文数据就不再是乱码了。
二、超链接时出现乱码(低版本浏览器不行IE6)
在Web开发中,挺多的时候都是通过超链接去传递中文参数的,这也会导致在显示的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了一个请求,而它发出的请求是属于get请求,所以对于超链接的乱码来说,它处理乱码的方式和表单的get请求出现乱码的方式是一样的。
三、重定向时出现乱码(低版本浏览器不行IE6)
有时写上response的sendRedirect方法进行重定向时也会出现乱码,重定向时实际上也是向服务器发送了一个请求,所以解决乱码的方法和和上面是一样的。
四、浏览器版本低导致的乱码
上网的时候,有时提交的一些信息在地址栏显示的是“%2C%C6%CC%C6”的字样,其实这都是防止出现乱码进行的解决方案,如果你的浏览器是IE6或以下版本,则我们的第二种情况和第三种情况会出现乱码(尤其是当中文是奇数的时候),这就不好使了所以我们必须采用另一种比较实际的作法:
在java.net包中提供了URLEncoder类和URLDcoder类,这两个类又分别提供了encode和decode两个静态方法,分别用于进行编码和解码。我们将要传递的中文参数进行编码之后,在传递给服务器,服务器解码之后,就可以显示中文了。
进行编码:URLEncoder.encode(stuname,”UTF-8”)
传递给服务器:<a href=”/1.jsp?stuname<%=stuname%>”>传递</a>
进行解码:URLDecoder.decode(stuname,”UTF-8”)
五、返回浏览器显示的乱码
在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。
只要编写Servlet文件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第二句话,因为它的优先级高,它的设置结果将覆盖setContentType等方法设置的字符编码集。
六、修改Tomcat的编码
在get请求所导致乱码问题中,还有一种解决的方案,我们常用Tomcat作为运行Servlet和JSP的容器,而Tomcat内部默认的编码是ISO-8859-1,所以对于get请求方式,其传递的数据(URI)会附加在访问的资源后面,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求方式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置文件server.xml中找到修改Tomcat的端口的地方,在其内部加入URIEncoding属性,设置为和你的项目中所设的编码一样的值,这里全部都是UTF-8。
在编写Servlet和JSP的时候,为了避免出现乱码,最重要的就是:采用一致的编码,如果编码都一致了,肯定不会出现乱码。
<script>
$("#blog_detail_zk_collection").click(function(){
window.csdn.articleCollection()
})
<div class="recommend-box first-recommend-box"><div class="recommend-item-box type_blog clearfix">
<div class="content" style="width: 864px;">
<a href="https://blog.csdn.net/kt400_hhx/article/details/1641574" target="_blank" rel="noopener" title="jsp乱码解决大全" data-report-click="{"mod":"popu_387","index":"1","strategy":"OPENSEARCH","dest":"https:\/\/blog.csdn.net\/kt400_hhx\/article\/details\/1641574"}" data-report-query="depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1">
<h4 class="text-truncate oneline" style="width: 704px;">
jsp<em>乱码</em><em>解决</em><em>大全</em> </h4>
<div class="info-box d-flex align-content-center">
<p class="date-and-readNum oneline">
<span class="date hover-show">06-07</span>
<span class="read-num hover-hide">
阅读数
2457</span>
</p>
</div>
</a>
<p class="content" style="width: 864px;">
<a href="https://blog.csdn.net/kt400_hhx/article/details/1641574" target="_blank" rel="noopener" title="jsp乱码解决大全">
<span class="desc oneline">jsp中文显示乱码解决方案2006-12-27 22:56一、JSP页面显示乱码二、表单提交中文时出现乱码三、数据库连接大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在...</span>
</a>
<span class="blog_title_box oneline ">
<span class="type-show type-show-blog type-show-after">博文</span>
<a target="_blank" rel="noopener" href="https://blog.csdn.net/kt400_hhx">来自: <span class="blog_title"> kt400_hhx的专栏</span></a>
</span>
</p>
</div>
</div>
中文乱码问题解决大全 - weixin_34384915的博客 - CSDN博客
<div class="recommend-item-box blog-expert-recommend-box" style="display: block;">
<div class="d-flex">
<div class="blog-expert-recommend">
<div class="blog-expert">
<div class="blog-expert-flexbox" data-report-view="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/kt400_hhx" target="_blank"><img src="https://profile.csdnimg.cn/C/C/8/3_kt400_hhx" username="kt400_hhx" alt="kt400_hhx" title="kt400_hhx"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><span class="blog-expert-button-follow btn-red-follow" data-name="kt400_hhx" data-nick="kt400_hhx">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/kt400_hhx" target="_blank"><h5 class="oneline" title="kt400_hhx">kt400_hhx</h5></a></span> <p></p><p class="article-num" title="60篇文章"> 60篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/susubuhui" target="_blank"><img src="https://profile.csdnimg.cn/0/B/8/3_susubuhui" username="susubuhui" alt="susubuhui" title="susubuhui"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><span class="blog-expert-button-follow btn-red-follow" data-name="susubuhui" data-nick="susubuhui">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/susubuhui" target="_blank"><h5 class="oneline" title="susubuhui">susubuhui</h5></a></span> <p></p><p class="article-num" title="538篇文章"> 538篇文章</p><p class="article-num" title="排名:3000+"> 排名:3000+</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/shendeguang" target="_blank"><img src="https://profile.csdnimg.cn/7/C/1/3_shendeguang" username="shendeguang" alt="shendeguang" title="shendeguang"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><span class="blog-expert-button-follow btn-red-follow" data-name="shendeguang" data-nick="shendeguang">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/shendeguang" target="_blank"><h5 class="oneline" title="shendeguang">shendeguang</h5></a></span> <p></p><p class="article-num" title="373篇文章"> 373篇文章</p><p class="article-num" title="排名:9000+"> 排名:9000+</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/qq1076376640" target="_blank"><img src="https://profile.csdnimg.cn/E/9/2/3_qq1076376640" username="qq1076376640" alt="柑橘&柑茶" title="柑橘&柑茶"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><span class="blog-expert-button-follow btn-red-follow" data-name="qq1076376640" data-nick="柑橘&柑茶">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/u010662647/article/details/79565715"}"><a href="https://blog.csdn.net/qq1076376640" target="_blank"><h5 class="oneline" title="柑橘&柑茶">柑橘&柑茶</h5></a></span> <p></p><p class="article-num" title="14篇文章"> 14篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div></div>
</div>
</div>
</div>
</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_387","dest":"https://blog.csdn.net/Allen_liyu/article/details/79508737","strategy":"searchFromBaidu1","index":"3"}" data-report-click="{"mod":"popu_387","dest":"https://blog.csdn.net/Allen_liyu/article/details/79508737","strategy":"searchFromBaidu1","index":"3"}" data-track-view="{"mod":"popu_387","dest":"https://blog.csdn.net/Allen_liyu/article/details/79508737","strategy":"searchFromBaidu1","index":2,"extend1":"_"}" data-track-click="{"mod":"popu_387","dest":"https://blog.csdn.net/Allen_liyu/article/details/79508737","strategy":"searchFromBaidu1","index":2,"extend1":"_"}" data-flg="true"> <a href="https://blog.csdn.net/Allen_liyu/article/details/79508737" target="_blank"> <h4 class="text-truncate oneline" style="width: 774px;">Java项目彻底<em>解决</em>中文<em>乱码</em>问题_Java_Allen_liyu的博客-CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">4-11</span> </p> </div> </a> </div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_387","dest":"https://blog.csdn.net/u011247942/article/details/88650340","strategy":"searchFromBaidu1","index":"4"}" data-report-click="{"mod":"popu_387","dest":"https://blog.csdn.net/u011247942/article/details/88650340","strategy":"searchFromBaidu1","index":"4"}" data-track-view="{"mod":"popu_387","dest":"https://blog.csdn.net/u011247942/article/details/88650340","strategy":"searchFromBaidu1","index":3,"extend1":"_"}" data-track-click="{"mod":"popu_387","dest":"https://blog.csdn.net/u011247942/article/details/88650340","strategy":"searchFromBaidu1","index":3,"extend1":"_"}" data-flg="true"> <a href="https://blog.csdn.net/u011247942/article/details/88650340" target="_blank"> <h4 class="text-truncate oneline" style="width: 774px;">Java后台开发中<em>乱码</em>的转换_u011247942的博客-CSDN博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">1-10</span> </p> </div> </a> </div>
web乱码解决 - u010662647的博客 - CSDN博客
java乱码问题解决方法_Java_zhengyikuangge的博客-CSDN博客
java 字符串中文乱码解决合集_Archer的博客-CSDN博客
java 处理乱码三种方式_m0_38068812的博客-CSDN博客
解决java读取文件乱码问题_u012890715的专栏-CSDN博客
我以为我学懂了数据结构,直到看了这个导图才发现,我错了
数据结构与算法思维导图 博文 来自: 龙跃十二
<div class="recommend-item-box type_hot_word">
<div class="content clearfix" style="width: 852px;">
<div class="float-left">
<span>
<a href="https://java.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://java.csdn.net/","index":"索引1"}" data-report-view="{"mod":"1586412712_001","dest":"https://java.csdn.net/","index":"1"}" target="_blank">
Java</a>
</span>
<span>
<a href="https://c1.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://c1.csdn.net/","index":"索引2"}" data-report-view="{"mod":"1586412712_001","dest":"https://c1.csdn.net/","index":"2"}" target="_blank">
C语言</a>
</span>
<span>
<a href="https://python.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://python.csdn.net/","index":"索引3"}" data-report-view="{"mod":"1586412712_001","dest":"https://python.csdn.net/","index":"3"}" target="_blank">
Python</a>
</span>
<span>
<a href="https://cplus.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://cplus.csdn.net/","index":"索引4"}" data-report-view="{"mod":"1586412712_001","dest":"https://cplus.csdn.net/","index":"4"}" target="_blank">
C++</a>
</span>
<span>
<a href="https://csharp.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://csharp.csdn.net/","index":"索引5"}" data-report-view="{"mod":"1586412712_001","dest":"https://csharp.csdn.net/","index":"5"}" target="_blank">
C#</a>
</span>
<span>
<a href="https://vbn.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://vbn.csdn.net/","index":"索引6"}" data-report-view="{"mod":"1586412712_001","dest":"https://vbn.csdn.net/","index":"6"}" target="_blank">
Visual Basic .NET</a>
</span>
<span>
<a href="https://js.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://js.csdn.net/","index":"索引7"}" data-report-view="{"mod":"1586412712_001","dest":"https://js.csdn.net/","index":"7"}" target="_blank">
JavaScript</a>
</span>
<span>
<a href="https://php.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://php.csdn.net/","index":"索引8"}" data-report-view="{"mod":"1586412712_001","dest":"https://php.csdn.net/","index":"8"}" target="_blank">
PHP</a>
</span>
<span>
<a href="https://sql.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://sql.csdn.net/","index":"索引9"}" data-report-view="{"mod":"1586412712_001","dest":"https://sql.csdn.net/","index":"9"}" target="_blank">
SQL</a>
</span>
<span>
<a href="https://go.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://go.csdn.net/","index":"索引10"}" data-report-view="{"mod":"1586412712_001","dest":"https://go.csdn.net/","index":"10"}" target="_blank">
Go语言</a>
</span>
<span>
<a href="https://r.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://r.csdn.net/","index":"索引11"}" data-report-view="{"mod":"1586412712_001","dest":"https://r.csdn.net/","index":"11"}" target="_blank">
R语言</a>
</span>
<span>
<a href="https://assembly.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://assembly.csdn.net/","index":"索引12"}" data-report-view="{"mod":"1586412712_001","dest":"https://assembly.csdn.net/","index":"12"}" target="_blank">
Assembly language</a>
</span>
<span>
<a href="https://swift.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://swift.csdn.net/","index":"索引13"}" data-report-view="{"mod":"1586412712_001","dest":"https://swift.csdn.net/","index":"13"}" target="_blank">
Swift</a>
</span>
<span>
<a href="https://ruby.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://ruby.csdn.net/","index":"索引14"}" data-report-view="{"mod":"1586412712_001","dest":"https://ruby.csdn.net/","index":"14"}" target="_blank">
Ruby</a>
</span>
<span>
<a href="https://matlab.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://matlab.csdn.net/","index":"索引15"}" data-report-view="{"mod":"1586412712_001","dest":"https://matlab.csdn.net/","index":"15"}" target="_blank">
MATLAB</a>
</span>
<span>
<a href="https://plsql.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://plsql.csdn.net/","index":"索引16"}" data-report-view="{"mod":"1586412712_001","dest":"https://plsql.csdn.net/","index":"16"}" target="_blank">
PL/SQL</a>
</span>
<span>
<a href="https://perl.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://perl.csdn.net/","index":"索引17"}" data-report-view="{"mod":"1586412712_001","dest":"https://perl.csdn.net/","index":"17"}" target="_blank">
Perl</a>
</span>
<span>
<a href="https://vb.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://vb.csdn.net/","index":"索引18"}" data-report-view="{"mod":"1586412712_001","dest":"https://vb.csdn.net/","index":"18"}" target="_blank">
Visual Basic</a>
</span>
<span>
<a href="https://obj.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://obj.csdn.net/","index":"索引19"}" data-report-view="{"mod":"1586412712_001","dest":"https://obj.csdn.net/","index":"19"}" target="_blank">
Objective-C</a>
</span>
<span>
<a href="https://delphi.csdn.net/" data-report-click="{"mod":"1586412712_001","dest":"https://delphi.csdn.net/","index":"索引20"}" data-report-view="{"mod":"1586412712_001","dest":"https://delphi.csdn.net/","index":"20"}" target="_blank">
Delphi/Object Pascal</a>
</span>
<span>
<a href="https://www.csdn.net/unity/" data-report-click="{"mod":"1586412712_001","dest":"https://www.csdn.net/unity/","index":"索引21"}" data-report-view="{"mod":"1586412712_001","dest":"https://www.csdn.net/unity/","index":"21"}" target="_blank">
Unity3D</a>
</span>
</div>
</div>
</div>
<div class="recommend-loading-box">
<img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
</div>
<div class="recommend-end-box" style="display: block;">
<p class="text-center">没有更多推荐了,<a href="https://blog.csdn.net/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
</div>
</div>
<div class="template-box">
<span>©️2019 CSDN</span><span class="point"></span>
<span>皮肤主题: 大白</span>
<span> 设计师:
CSDN官方博客 </span>
</div>
</main>