設定檔的儲存編碼格式,這個一般在新建專案時,設定了GBK的編碼格式,此時檔案的頁面編碼格式是GBK的,而儲存格式是ANSI的,後來把項目及文件的編碼格式改為utf-8的編碼格式後,依然出現中文亂碼,這就是因為已經存在的文件的保存編碼格式還是ANSI把致,所以要把以前的.java文件的保存格式改為utf-8,才不會出現中文註解亂碼問題
window-preferences-General-Content Types 在Text下選擇對應的檔案類型再改頁面編碼為UTF-8然後點Update就可以了。
附註:
如果是全新的工作空間,設定Myeclipse的編碼格式,就等於設定了項目,檔案及其儲存的編碼格式了(不包含jsp等檔案)
如果是已經存在的工作間,而原來的編碼格式為GBK,那麼更改工作空間的編碼,則相當於設定了項目,檔案的編碼格式,但是對於以前已經存在的.java文件,其保存編碼是改變不了的,必須按上面(4)去更改,但是對於將要新建的文件的保存編碼是有作用的
亂碼要檢查的幾個地方
1.已儲存的編碼
2.jsp裡宣告的編碼(UTF-8和utf8是一樣的)
注意:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
3 .過濾器裡處理的字元編碼,僅限於輸入的輸出的資料編碼。而上面那句程式碼中設的編碼格式就是頁面的顯示格式。
一份javaweb的專案程式碼中,總共有這幾種格式:
1.程式碼的儲存格式2.瀏覽器的解析格式3.資料輸入時的格式(也就是瀏覽器的解析格式決定)4.資料處理時的格式。
原則上以上六種格式都要一樣,就絕對不會亂碼,但有一些特殊情況,其中有一些不一致,顯示也會正確,如不需要將輸入的內容進行顯示和處理時request和respose的格式可以與其他的格式不一致,ps:常用編碼ISO-8859-1,gbk,utf-8
因此萬無一失的辦法如下:
Jsp裡的宣告語句可以弄掉四種格式,而剩下的兩種格式可以用監聽器的方法解決:
新建一個監聽器
package com.helloweenvsfei.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class CharacterEncodingFilter implements Filter{ private String characterEncoding; private boolean enabled; public void destroy() { // TODO Auto-generated method stub characterEncoding = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub if(enabled || characterEncoding != null){ request.setCharacterEncoding(characterEncoding); response.setCharacterEncoding(characterEncoding); } chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { // TODO Auto-generated method stub characterEncoding = config.getInitParameter("characterEncoding"); enabled = "true".equalsIgnoreCase(config.getInitParameter("enabled").trim()); } }
web.xml
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>com.helloweenvsfei.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>characterEncoding</param-name> <param-value>utf8</param-value> </init-param> <init-param> <param-name>enabled</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
更多java知識請關注java基礎教學欄位。
以上是java web亂碼解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!