您好,登錄后才能下訂單哦!
這篇“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。