web中常见乱码问题详解
基本講解:
1.UTF-8國際編碼,GBK中文編碼。GBK包含GB2312,即如果通過GB2312編碼后可以通過GBK解碼,反之可能不成立;
2、web tomcat:默認是ISO8859-1,不支持中文的
3.java.nio.charset.Charset.defaultCharset()?獲得平臺默認字符編碼;
4.getBytes() 是通過平臺默認字符集進行編碼;
?
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中設置字符編碼,則無此方法,因為Filter的doFilter方法的參數類型是ServletResponse)
兩句都填上,后來終于解決了這個問題;
其實我們應該思考一下本質:
?
response.setContentType("text/html;charset=UTF-8");?目的是為了控制瀏覽器的行為,即控制瀏覽器用UTF-8進行解碼;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()輸出的字符流的亂碼問題。如果是response.getOutputStream()是不需要此種解決方案的,因為這句話的意思是為了將response對象中的數據以UTF-8解碼后的字節流發向瀏覽器;
Servlet相關的幾種亂碼******************
1、瀏覽器調用jsp,html等頁面中文顯示亂碼
此情況需滿足兩個要求:
(1)文件本身是以utf-8編輯保存的(myEclipse中在properties中鼠標右鍵選擇utf-8)
(2)瀏覽器用utf-8解析:
(手動)==> 在瀏覽器中右鍵選擇編碼格式為utf-8
(智能)==> 在文件中寫入如:?<meta name="content-type" content="text/html; charset=UTF-8"> ?通過<meta>標簽模擬response頭,起到告訴瀏覽器用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請求分為post和get,對于不同的請求方式有不同的解決亂碼的方案; ==>POST請求:==>GET請求(URI方式傳遞參數亂碼):
出現情況:瀏覽器訪問<a href=""><form method="get">如:<a href="/webproject/display.jsp?username=張三&password=123">顯示用戶名和密碼</a>
解決方法:問題本質是get方式傳遞的參數內容默認編碼方式問ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也無法解決問題。
法一:要解決這個問題,修改tomcat服務器的配置文件。修改tomcat目錄下的conf/server.xml文件的第43行:
修改前內容:
<Connector port="8080" protocol="HTTP/1.1"
???? maxThreads="150"?? connectionTimeout="200000"
???? redirecPort="8443"/>
修改后內容:
?
<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相關亂碼解決覺案**************************
問題描述:通過jsp,html,或servlet中的表單元素把參數提交給對應的jsp或者servlet時,在接收的jsp或servlet中接收到的參數中文顯示亂碼。
例如:
提交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>
?
接收參數的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提交的參數前,使用request.setCharacterEncoding("utf-8")設定接收參數的內容格式為utf-8編碼。見接收表單中的插入內容即可。當然這種亂碼問題最好使用中文過濾器的方法最好。
?
web引入js文件出現亂碼的解決方式:******************
在web開發中我們一般都會不可避免的使用js。我們可以將js代碼直接放在頁面中即通過內部使用js。但是為了給頁面良好的"瘦身"我們一般都會將js代碼放在外部,然后通過src引用。這個時候我們就需要注意一個問題:編碼問題。如果web頁面也js采用不同編碼,這個時候就會出現亂碼。(內部使用js不需要注意編碼問題,因為他們采用的是同一種編碼)?
解決方式1:
<script type=”text/javascript” src=”test.js” charset=”utf-8″></script>?
解決方式2:
<script type=”text/javascript” src=”test.js” charset=”gb2312″></script>?
轉載于:https://www.cnblogs.com/xiaobaizhang/p/8016691.html
總結
以上是生活随笔為你收集整理的web中常见乱码问题详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十七次ScrumMeeting会议
- 下一篇: 员工信息增删改查程序 (大神版)