下面是Servlet中操縱response標的目的頁面輸出中文時發生亂碼的問題,感樂趣的可以看一下。
起首我們來建立一個類名為OutServlet的類,接下來讓它擔當HttpServelt類,然后重寫doGet和doPost的方式。
然后我們在web.xml設置裝備擺設OutServlet的相關的信息,好比類的全路徑和拜候路徑。
接下來我們在OutServlet的doGet方式中操縱response對象挪用getOutputStream()獲取一個OutputStream的對象。
然后我們來挪用OutpuStream對象的write()方式輸出一個字節數組,這個字節數組由中文字符串轉化得來。
操縱OutputStream這種體例輸出中文有可能發生亂碼。注重是有可能,而不是必然發生亂碼。
本家兒如果看瀏覽器打開文件的編碼體例和文件的默認編碼體例是否一樣,編碼一致它就不會發生亂碼,紛歧致就會發生亂碼。
好比下面的兩個成果:利用火狐瀏覽器拜候發生亂碼,利用360瀏覽器不會亂碼。(注重瀏覽器分歧的版本可能默認的編碼體例可能紛歧樣,所以你用同樣的瀏覽器,獲得的成果紛歧心猿意馬一致;再加上瀏覽器也是可以本身設置編碼體例的)
我利用的360平安瀏覽器,因為它有一個主動檢測的功能,所以無論你的文件是GBK仍是UTF-8的編碼體例,它城市和你的文件一致,也就不會呈現亂碼。(當然這和版本也有關)
為了讓它實現無論用什么瀏覽器都不會亂碼,我們來設置瀏覽器打開這個文件的編碼體例;然后設置文件的編碼體例。讓兩者的編碼體例一致,它就不會亂碼了。
添加了上面的代碼之后,再啟動辦事器,然后用之前亂碼的火狐瀏覽器拜候,可以發現這一次利用火狐也不亂碼了。
別的一種標的目的頁面輸出體例是字符流輸出。
resp.getWriter().write("帥得不敷較著");
字符流輸出若是不設置編碼體例,必然會亂碼。
因為getWriter()獲得的是一個PrintWriter,它有一個緩沖區,緩沖區的默認編碼是ISO-8859-1 這種編碼是不撐持中文的,所以必亂碼。
我們的話可以經由過程設置緩沖區編碼和設置瀏覽器打開編碼,讓它們兩個編碼一致,如許就可以解決中文亂碼了。
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
如下圖所示當編碼一致的時辰,就不會呈現亂碼了。
別的
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type", "text/html;charset=UTF-8");
有一個簡寫體例,
resp.setContentType("text/html;charset=UTF-8");//一句等價于上面兩句,所以我們用簡寫體例就可以了。
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!