web中常见乱码问题详解
基本講解:
1.UTF-8國際編碼,GBK中文編碼。GBK包含GB2312,即如果通過GB2312編碼后可以通過GBK解碼,反之可能不成立;
2、web tomcat:默認(rèn)是ISO8859-1,不支持中文的
3.java.nio.charset.Charset.defaultCharset()?獲得平臺(tái)默認(rèn)字符編碼;
4.getBytes() 是通過平臺(tái)默認(rèn)字符集進(jìn)行編碼;
?
response亂碼問題********************
解決方法:
添加:
response.setCharacterEncoding("UTF-8");
解決不了,后來又搜到一條解決方法是:
response.setContentType("text/html;charset=utf-8");或者?response.setHeader("content-type","text/html;charset=UTF-8");告訴瀏覽器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在攔截器Filter中設(shè)置字符編碼,則無此方法,因?yàn)镕ilter的doFilter方法的參數(shù)類型是ServletResponse)
兩句都填上,后來終于解決了這個(gè)問題;
其實(shí)我們應(yīng)該思考一下本質(zhì):
?
response.setContentType("text/html;charset=UTF-8");?目的是為了控制瀏覽器的行為,即控制瀏覽器用UTF-8進(jìn)行解碼;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()輸出的字符流的亂碼問題。如果是response.getOutputStream()是不需要此種解決方案的,因?yàn)檫@句話的意思是為了將response對(duì)象中的數(shù)據(jù)以UTF-8解碼后的字節(jié)流發(fā)向?yàn)g覽器;
Servlet相關(guān)的幾種亂碼******************
1、瀏覽器調(diào)用jsp,html等頁面中文顯示亂碼
此情況需滿足兩個(gè)要求:
(1)文件本身是以u(píng)tf-8編輯保存的(myEclipse中在properties中鼠標(biāo)右鍵選擇utf-8)
(2)瀏覽器用utf-8解析:
(手動(dòng))==> 在瀏覽器中右鍵選擇編碼格式為utf-8
(智能)==> 在文件中寫入如:?<meta name="content-type" content="text/html; charset=UTF-8"> ?通過<meta>標(biāo)簽?zāi)Mresponse頭,起到告訴瀏覽器用utf-8的編碼解析
(智能)==>?response.setContentType("text/html;charset=UTF-8");起到告訴瀏覽器用utf-8的編碼解析
常用:
<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">
<%@ pageEncoding="utf-8"%>
<?xml encoding="UTF-8"?>
?
request亂碼問題*******************
request請(qǐng)求分為post和get,對(duì)于不同的請(qǐng)求方式有不同的解決亂碼的方案; ==>POST請(qǐng)求:==>GET請(qǐng)求(URI方式傳遞參數(shù)亂碼):
出現(xiàn)情況:瀏覽器訪問<a href=""><form method="get">如:<a href="/webproject/display.jsp?username=張三&password=123">顯示用戶名和密碼</a>
解決方法:問題本質(zhì)是get方式傳遞的參數(shù)內(nèi)容默認(rèn)編碼方式問ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也無法解決問題。
法一:要解決這個(gè)問題,修改tomcat服務(wù)器的配置文件。修改tomcat目錄下的conf/server.xml文件的第43行:
修改前內(nèi)容:
<Connector port="8080" protocol="HTTP/1.1"
???? maxThreads="150"?? connectionTimeout="200000"
???? redirecPort="8443"/>
修改后內(nèi)容:
?
<Connector port="8080" protocol="HTTP/1.1"
???? maxThreads="150"?? connectionTimeout="200000"
???? redirecPort="8443"??? URIEncoding="utf-8"/>
法二:String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");?
JSP相關(guān)亂碼解決覺案**************************
問題描述:通過jsp,html,或servlet中的表單元素把參數(shù)提交給對(duì)應(yīng)的jsp或者servlet時(shí),在接收的jsp或servlet中接收到的參數(shù)中文顯示亂碼。
例如:
提交jsp代碼如下:
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<title>輸入表單</title>
</head>
<body>
<form id="inputForm" name="inputForm" method="post" action="display.jsp">
????? 用戶名:<input type="text" name="username"/><br/>
????? 密?? 碼? :<input type="password" name="password"/><br/>
???? <input type="submit" name="submit" value="提交"/>
</form>
</body>
</html>
?
接收參數(shù)的jsp代碼如下:
<% @? page language="java" pageEncoding="utf-8"%>
<html>
<head>
<tilte>接收表單</title>
</head>
<body>
?????<% 在這里插入
?????????? request.setCharacterEncoding("utf-8");
????? %>
? ? ?? 用戶名:<%=request.getParameter("username")%><br/>
????? 密???? 碼:<%=request.getParameter("password")%><br/>
</body>
</html>
解決方法:在接收post提交的參數(shù)前,使用request.setCharacterEncoding("utf-8")設(shè)定接收參數(shù)的內(nèi)容格式為utf-8編碼。見接收表單中的插入內(nèi)容即可。當(dāng)然這種亂碼問題最好使用中文過濾器的方法最好。
?
web引入js文件出現(xiàn)亂碼的解決方式:******************
在web開發(fā)中我們一般都會(huì)不可避免的使用js。我們可以將js代碼直接放在頁面中即通過內(nèi)部使用js。但是為了給頁面良好的"瘦身"我們一般都會(huì)將js代碼放在外部,然后通過src引用。這個(gè)時(shí)候我們就需要注意一個(gè)問題:編碼問題。如果web頁面也js采用不同編碼,這個(gè)時(shí)候就會(huì)出現(xiàn)亂碼。(內(nèi)部使用js不需要注意編碼問題,因?yàn)樗麄儾捎玫氖峭环N編碼)?
解決方式1:
<script type=”text/javascript” src=”test.js” charset=”utf-8″></script>?
解決方式2:
<script type=”text/javascript” src=”test.js” charset=”gb2312″></script>?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaobaizhang/p/8016691.html
總結(jié)
以上是生活随笔為你收集整理的web中常见乱码问题详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十七次ScrumMeeting会议
- 下一篇: 员工信息增删改查程序 (大神版)