1. 程式人生 > >javaWeb專案亂碼分析和解決

javaWeb專案亂碼分析和解決

設定檔案的儲存編碼格式,這個一般在新建專案時,設定了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;	//���뷽ʽ��������web.xml��
	private boolean enabled;			//�Ƿ����ø�Filter��������web.xml��

	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){//������ø�Filter
			request.setCharacterEncoding(characterEncoding);
			//����request����
			response.setCharacterEncoding(characterEncoding);
			//����response����
		}
		chain.doFilter(request, response);
		//doFilterִ����һ��Filter����Servlet
		
	}

	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>