導航:首頁 > 凈水問答 > 用戶輸入亂碼過濾

用戶輸入亂碼過濾

發布時間:2022-08-13 03:07:06

⑴ 頁面亂碼問題怎麼解決

1.第一個地方的編碼格式為jsp文件的存儲格式。Eclipse會根據這個編碼格式保存文件。並編譯jsp文件,包括裡面的漢字。
第二處編碼為解碼格式。因為存為UTF-8的文件被解碼為iso8859-1,這樣如有中文肯定出亂碼。也就是必須一致。而第二處所在的這一行,可以沒有。預設也是使用iso8859-1的編碼格式。所以如果沒有這一行的話,「我是個好人」也會出現亂碼。必須一致才可以。
第三處編碼為控制瀏覽器的解碼方式。如果前面的解碼都一致並且無誤的話,這個編碼格式沒有關系。有的網頁出現亂碼,就是因為瀏覽器不能確定使用哪種編碼格式。因為頁面有時候會嵌入頁面,導致瀏覽器混淆了編碼格式。出現了亂碼。
2.表單使用Post方式提交後接收到的亂碼問題
這個問題也是一個常見的問題。這個亂碼也是tomcat的內部編碼格式iso8859-1在搗亂,也就是說post提交時,如果沒有設置提交的編碼格式,則會以iso8859-1方式進行提交,接受的jsp卻以utf-8的方式接受。導致亂碼。既然這樣的原因,下面有幾種解決方式,並比較。
A,接受參數時進行編碼轉換
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-
8") ; 這樣的話,每一個參數都必須這樣進行轉碼。很麻煩。但確實可以拿到漢字。
B,在請求頁面上開始處,執行請求的編碼代碼, request.setCharacterEncoding("UTF-8"),把提交內容的字元集設為UTF-8。這樣的話,接受此參數的頁面就不必在轉碼了。直接使用String str = request.getParameter("something");即可得到漢字參數。但每頁都需要執行這句話。這個方法也就對post提交的有效果,對於get提交和上傳文件時enctype="multipart/form-data"是無效的。稍後下面單獨對這個兩個的亂碼情況再進行說明。
C,為了避免每頁都要寫request.setCharacterEncoding("UTF-8"),建議使用過濾器對所有jsp。

現在將常見的亂碼問題分為JSP頁面顯示中文亂碼、表單提交亂碼兩類。

1)JSP頁面中顯示中文亂碼

在JSP文件中使用page命令指定響應結果的MIME類型,如<%@ page language="java"

contentType="text/html;charset=gb2312" %>

2)表單提交亂碼

表單提交時(post和Get方法),使用request.getParameter方法得到亂碼,這是因為tomcat處理提交

的參數時默認的是iso-8859-1,表單提交get和post處理亂碼問題不同,

下面分別說明。

(1)POST處理

對post提交的表單通過編寫一個過濾器的方法來解決,過濾器在用戶提交的數據被處理之前被調用

,可以在這里改變參數的編碼方式,過濾器的代碼如下:

Java代碼

CharacterEncodingFilter.java:

public class CharacterEncodingFilter implements Filter

{

protected String encoding = null;

public void init(FilterConfig filterConfig) throws ServletException

{

this.encoding = filterConfig.getInitParameter("encoding");

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain

chain) throws IOException, ServletException

{

request.setCharacterEncoding(encoding);

response.setContentType("text/html;charset="+encoding);

chain.doFilter(request, response);

}

}

web.xml:

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>GBK</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

(2) Get方法的處理

tomcat對post和get的處理方法不一樣,所以過濾器不能解決get的亂碼問題,它需要在其他地方設

置。

打開<tomcat_home>\conf目錄下server.xml文件,找到對8080埠進行服務的Connector組件的設置

部分,給這個組件添加一個屬性:URIEncoding="GBK"。修改後的Connector設置

為:

Java代碼

<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" <SPAN style="COLOR:

#ff0000">URIEncoding="GBK"</SPAN> />

<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

*注意修改後重新啟動tomcat才能起作用。

/***********************************************************過濾器的使用

*******************************************************/

3,表單get提交方式的亂碼處理方式。

如果使用get方式提交中文,接受參數的頁面也會出現亂碼,這個亂碼的原因也是tomcat的內部編碼

格式iso8859-1導致。Tomcat會以get的預設編碼方式iso8859-1對漢字進行編碼,編碼後追加到url,導

致接受頁面得到的參數為亂碼/、。

解決辦法:

A,使用上例中的第一種方式,對接受到的字元進行解碼,再轉碼。

B, Get走的是url提交,而在進入url之前已經進行了iso8859-1的編碼處理。要想影響這個編碼則

需要在server.xml的Connector節點增加useBodyEncodingForURI="true"

屬性配置,即可控制tomcat對get方式的漢字編碼方式,上面這個屬性控制get提交也是用

request.setCharacterEncoding("UTF-8")所設置的編碼格式進行編碼。所以自動編碼為

utf-8,接受頁面正常接受就可以了。

但我認為真正的編碼過程是,tomcat又要根據

<Connector port="8080"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"

disableUploadTimeout="true" URIEncoding=」UTF-8」/>

裡面所設置的URIEncoding=」UTF-8」再進行一次編碼,但是由於已經編碼為utf-8,再編碼也不會

有變化了。如果是從url獲取編碼,接受頁面則是根據URIEncoding=」UTF-8」來

進行解碼的。

4,上傳文件時的亂碼解決

上傳文件時,form表單設置的都是enctype="multipart/form-data"。這種方式以流方式提交文件。

如果使用apach的上傳組件,會發現有很多亂碼想像。這是因為apach的先期

commons-fileupload.jar有bug,取出漢字後進行解碼,因為這種方式提交,編碼又自動使用的是

tomcat預設編碼格式iso-8859-1。但出現的亂碼問題是:句號,逗號,等特殊符號

變成了亂碼,漢字如果數量為奇數,則會出現亂碼,偶數則解析正常。

解決方式:下載commons-fileupload-1.1.1.jar這個版本的jar已經解決了這些bug。

但是取出內容時仍然需要對取出的字元進行從iso8859-1到utf-8轉碼。已經能得到正常所有漢字以

及字元。

5,Java代碼關於url請求,接受參數的亂碼

url的編碼格式,取決於上面所說的URIEncoding=」UTF-8」。如果設定了這個編碼格式,則意味著

所有到url的漢字參數,都必須進行編碼才可以。否則得到的漢字參數值都是亂

碼,例如

一個鏈接Response.sendDerect(「/a.jsp?name=張大維」);而在a.jsp裡面直接使用

String name = request.getParameter("name");得到的就是亂碼。因為規定了必須是utf-8才可以

,所以,這個轉向應該這樣寫:

Response.sendDerect(「/a.jsp?name=URLEncode.encode(「張大維」,」utf-8」);才可以。

如果不設置這個參數URIEncoding=」UTF-8」,會怎麼樣呢?不設置則就使用了預設的編碼格式

iso8859-1。問題又出來了,第一就是參數值的個數如果是奇數個數,則就可以正

常解析,如果使偶數個數,得到最後字元就是亂碼。還有就是如果最後一個字元如果是英文,則就

能正常解析,但中文的標點符號仍出現亂碼。權宜之計,如果您的參數中沒有中

文標點符號,則可以在參數值最後加一個英文符號來解決亂碼問題,得到參數後再去掉這個最後面

的符號。也可以湊或使用。

6,腳本代碼關於url請求,接受到的參數亂碼

腳本中也會進行頁面轉向的控制,也會涉及到附帶參數,並在接受頁面解析這個參數的情況。如果

這個漢字參數不進行URIEncoding=」UTF-8」所指定的編碼處理,則接受頁面接受

到的漢字也是亂碼。腳本處理編碼比較麻煩,必須有相應的編碼腳本對應文件,然後調用腳本中的

方法對漢字進行編碼即可。

7,關於jsp在MyEclipse中打開的亂碼問題

對於一個已經存在的項目,Jsp文件的存儲格式可能是utf-8。如果新安裝的eclipse,則預設打開使

用的編碼格式都是iso8859-1。所以導致jsp裡面的漢字出現亂碼。這個亂碼比

較容易解決,直接到eclipse3.1的偏好設置裡面找到general-〉edidor,設置為您的文件打開編碼

為utf-8即可。Eclipse會自動重新以新的編碼格式打開。漢字即可正常顯示。

8,關於html頁面在eclipse中打開出現亂碼情況

由於大部分頁面都是由dreamweaver製作,其存儲格式跟eclipse的識別有差別導致。

一般這種情況,在eclipse中新建一個jsp,直接從dreamweaver復制頁面內容粘貼到jsp即可

但我認為真正的編碼過程是,tomcat又要根據

<Connector port="8080"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"

disableUploadTimeout="true" URIEncoding=」UTF-8」/>

裡面所設置的URIEncoding=」UTF-8」再進行一次編碼,但是由於已經編碼為utf-8,再編碼也不會

有變化了。如果是從url獲取編碼,接受頁面則是根據URIEncoding=」UTF-8」來進行解碼的。

4,上傳文件時的亂碼解決

上傳文件時,form表單設置的都是enctype="multipart/form-data"。這種方式以流方式提交文件。

如果使用apach的上傳組件,會發現有很多亂碼想像。這是因為apach的先期

commons-fileupload.jar有bug,取出漢字後進行解碼,因為這種方式提交,編碼又自動使用的是

tomcat預設編碼格式iso-8859-1。但出現的亂碼問題是:句號,逗號,等特殊符號

變成了亂碼,漢字如果數量為奇數,則會出現亂碼,偶數則解析正常。

解決方式:下載commons-fileupload-1.1.1.jar這個版本的jar已經解決了這些bug。

但是取出內容時仍然需要對取出的字元進行從iso8859-1到utf-8轉碼。已經能得到正常所有漢字以

及字元。

5,Java代碼關於url請求,接受參數的亂碼

url的編碼格式,取決於上面所說的URIEncoding=」UTF-8」。如果設定了這個編碼格式,則意味著

所有到url的漢字參數,都必須進行編碼才可以。否則得到的漢字參數值都是亂

碼,例如

一個鏈接Response.sendDerect(「/a.jsp?name=張大維」);而在a.jsp裡面直接使用

String name = request.getParameter("name");得到的就是亂碼。因為規定了必須是utf-8才可以

,所以,這個轉向應該這樣寫:

Response.sendDerect(「/a.jsp?name=URLEncode.encode(「張大維」,」utf-8」);才可以。

如果不設置這個參數URIEncoding=」UTF-8」,會怎麼樣呢?不設置則就使用了預設的編碼格式

iso8859-1。問題又出來了,第一就是參數值的個數如果是奇數個數,則就可以正

常解析,如果使偶數個數,得到最後字元就是亂碼。還有就是如果最後一個字元如果是英文,則就

能正常解析,但中文的標點符號仍出現亂碼。權宜之計,如果您的參數中沒有中

文標點符號,則可以在參數值最後加一個英文符號來解決亂碼問題,得到參數後再去掉這個最後面

的符號。也可以湊或使用。

6,腳本代碼關於url請求,接受到的參數亂碼

腳本中也會進行頁面轉向的控制,也會涉及到附帶參數,並在接受頁面解析這個參數的情況。如果

這個漢字參數不進行URIEncoding=」UTF-8」所指定的編碼處理,則接受頁面接受

到的漢字也是亂碼。腳本處理編碼比較麻煩,必須有相應的編碼腳本對應文件,然後調用腳本中的

方法對漢字進行編碼即可。

7,關於jsp在MyEclipse中打開的亂碼問題

對於一個已經存在的項目,Jsp文件的存儲格式可能是utf-8。如果新安裝的eclipse,則預設打開使

用的編碼格式都是iso8859-1。所以導致jsp裡面的漢字出現亂碼。這個亂碼比

較容易解決,直接到eclipse3.1的偏好設置裡面找到general-〉edidor,設置為您的文件打開編碼

為utf-8即可。Eclipse會自動重新以新的編碼格式打開。漢字即可正常顯示。

8,關於html頁面在eclipse中打開出現亂碼情況

由於大部分頁面都是由dreamweaver製作,其存儲格式跟eclipse的識別有差別導致。

一般這種情況,在eclipse中新建一個jsp,直接從dreamweaver復制頁面內容粘貼到jsp即可

在使用JSP的過程中,最使人頭疼的一個問題就是中文亂碼問題,以下是我在軟體開發中遇到的亂碼

問題以及解決方法。

1、JSP頁面亂碼

這種亂碼的原因是應為沒有在頁面里指定使用的字元集編碼,解決方法:只要在頁面開始地方用下

面代碼指定字元集編碼即可,<%@ page contentType="text/html; charset=utf

-8" %>

2、資料庫亂碼

這種亂碼會使你插入資料庫的中文變成亂碼,或者讀出顯示時也是亂碼,解決方法如下:

在資料庫連接字元串中加入編碼字元集

String Url="jdbc:mysql://localhost/digitgulf?

user=root&password=root&useUnicode=true&characterEncoding=utf-8";

並在頁面中使用如下代碼:

response.setContentType("text/html;charset=utf-8");

request.setCharacterEncoding("utf-8");

3、中文作為參數傳遞亂碼

當我們把一段中文字元作為參數傳遞個另一頁面時,也會出現亂碼情況,解決方法如下:

在參數傳遞時對參數編碼,比如

RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)

然後在接收參數頁面使用如下語句接收

keywords=new String(request.getParameter("keywords").getBytes("8859_1"));

以上為現階段遇到的亂碼問題,亂碼的核心問題還是字元集編碼問題,我之前也就是被頁面的亂碼給困惑了很久感覺這個還是挺有用的就給大家分享下。

⑵ 如何消除電腦亂碼

一、亂碼有五種類型
常見的亂碼,一般可以分成五種類型:第一類是文本/文檔文件亂碼,這一般是由於源文件編碼,與Windows使用的編碼不通用造成的;第二類是網頁亂碼,形成原因與第一類亂碼類似;第三類是Windows系統界面亂碼,即中文Windows的菜單、桌面、提示框等顯示亂碼,主要是Windows注冊表中有關字體的部分設置不當引起的;第四類是應用程序的界面亂碼,即各種應用程序(包括游戲)本來顯示中文的地方出現亂碼,形成原因比較復雜,有第二類的亂碼原因,也可能是軟體用到的中文鏈接庫,被英文鏈接庫覆蓋造成的;第五類是郵件亂碼,形成原因也極其復雜。
二、如何消除應用程序的界面亂碼?
目前有些軟體發行了Unicode版本,這是一種通用的字元編碼標准,涵蓋了全球多種語言及古文和專業符號,這種版本的軟體運行在任何系統和語言上都不會亂碼,如果是非Unicode編碼的程序,就會有亂碼現象。
【形成原因】:原因有三種。如果是由於Windows注冊表中關於字體設置的信息不正確造成的,你可以用下面「如何消除Windows系統界面亂碼」介紹的辦法去解決;如果用上法解決不了,那就可能是由於軟體的中文鏈接庫,被英文鏈接庫覆蓋而引起的。這種現象經常發生在用微軟開發工具例如VB、VC開發的中文軟體上,這類軟體中,菜單等顯示界面上的漢字都是受一個動態鏈接庫(DLL文件)控制,而軟體的這個動態鏈接庫一般安裝在WindowsSystem目錄下,如果以後安裝了某個英文軟體也使用同名的動態鏈接庫,則英文軟體的動態鏈接庫就會覆蓋中文鏈接庫,這樣,運行中文軟體時就會調用英文的動態鏈接庫,因此出現亂碼。解決辦法:重新安裝中文軟體,恢復中文動態鏈接庫即可。
如果以上方法也無濟於事,對於Win9X/ME系統,你可以安裝使用MagicWin98(下載地址http://www.skycn.com/soft/3047.Html)、南極星等內碼轉換軟體,轉換內碼後即可消除亂碼;對於WinXP系統,建議使用微軟多語言支持工具MicrosoftAppLocale(下載地址http://www.skycn.com/soft/12582.html),利用它為指定程序設置相應的語言區域,這樣也可消除亂碼。
三、如何消除文本/文檔文件亂碼?
【形成原因】:一般是由於文檔採用的字元集,系統不支持造成的。例如繁體中文的文檔顯示在簡體中文系統下,或者相反的情況,就會造成文檔顯示時亂碼。只要你內碼轉換正確,例如把原本是繁體的內碼,轉換為簡體內碼(或者相反),即可消除亂碼。
【解決辦法】:有以下四種解決辦法:
1、使用Word2003/XP轉換內碼
Word2003/XP支持眾多的語言,可以正確顯示非Unicode類型的文本文件,單擊「工具」菜單下的「語言」/設置語言,你可以把默認語言設置成非中文,例如日語,這樣Word就可以正確顯示日文了。
當然你也可以用它進行簡體中文與繁體中文之間的轉換工作,如果文件有亂碼,你轉換一下即可消除。例如要把繁體中文轉換為簡體中文,方法是:選擇要轉換內碼的文件,在彈出的對話框中(如下圖),選擇「其他編碼」中的「繁體中文(BIG5)」一項,打開此文件時就不會出現亂碼。
2、使用Word2003/XP無亂碼保存
在Word2003/XP中,當保存時選擇「文件」中的「另存為」,先存為「WORD」文檔,存檔後打開再存為純文本等其他格式;或者在菜單欄中選擇「工具/語言/中文簡繁轉換」,內碼轉換以後再保存。
3、使用內碼轉換工具
除此之外,使用內碼轉換工具也可以消除此類亂碼,你只要對BIG5(繁體中文)和GB2312(國標碼、簡體中文)進行相互轉換即可實現。常用的內碼轉換工具有:
·磁碟陣列(Disk Array)原理
4、使用WPS2000轉換內碼
WPS2000也能轉換內碼,支持GB2312、BIG5、GBK等三種主要的漢字編碼,並可在輸出RTF、TXT、HTM格式文件時對內碼進行轉換。 四、如何消除網頁亂碼?
【形成原因】:網頁亂碼是瀏覽器(IE等)對HTML網頁解釋時形成的,如果網頁製作時編碼為A,瀏覽器卻以編碼B顯示該網頁,就會出現亂碼,因此只要你在瀏覽器中也以編碼A顯示該網頁,就會消除亂碼。
例如網頁的代碼中有形如:〈HTML〉〈HEAD〉〈META CONTENT=「text/html;charset=ISO-8859-1」〉〈/HEAD〉的語句,瀏覽器在顯示此頁時,就會出現亂碼,因為瀏覽器會將此頁語種辨認為「歐洲語系」。
【解決辦法】:有以下四種解決辦法:
1、在瀏覽器中選擇「編碼」菜單
事先為瀏覽器安裝多語言支持包(例如在安裝IE時要安裝多語言支持包),這樣當瀏覽網頁出現亂碼時,即可手工更改此類網頁的編碼方式,在瀏覽器中選擇菜單欄下的「查看」/「編碼」/「自動選擇」/簡體中文(GB2312),如為繁體中文則選擇「查看」/「編碼」/「自動選擇」/繁體中文(BIG5),其他語言依此類推,選擇相應的語系,這樣便可消除網頁亂碼現象。
2、修改網頁代碼
用FrontPage等軟體打開出現亂碼的網頁,修改該網頁代碼,在以下句子中
〈META CONTENT=「text/html;charset=ISO-8859-1」〉,將語種「ISO-8859-1」改為GB2312,如果是繁體網頁則改為BIG5。
3、無亂碼保存網頁
用瀏覽器打開該網頁,在「查看」/「編碼」中選擇「自動選擇」,存檔時保存類型選「WEB頁」,編碼選擇「UNICODE」,這樣保存過的網頁再次打開時,在瀏覽器菜單「查看」/「編碼」中不管選擇簡體中文(GB2312)、簡體中文(HZ)還是UNICODE(UTF-8)或繁體中文(BIG5),最終顯示都不會出現亂碼。
4、使用多內碼顯示軟體
使用多內碼顯示軟體來轉換內碼,也可以消除亂碼。常用多內碼顯示軟體有:
五、如何消除Windows系統界面亂碼?
【形成原因】:這類亂碼是由於Windows注冊表中關於字體部分配置不正常造成的,即使您用內碼翻譯軟體(如南極星、MagicWin98等)處理也不會消除。
【解決辦法】:在Windows注冊表中,恢復關於字體部分的正確設置。
1、利用顯示正常的電腦
假如有一台Windows版本相同、顯示正常的電腦可以利用,你可以如下步驟進行恢復:在正常機器上選擇「開始」/「運行」,在對話框中鍵入「REGEDIT」,打開注冊表編輯器;游標定位到「HKEY_LOCAL_MACHINESYSTEMCURRENT CONTROL SETCONTROLFONTASSOC」,選擇「注冊表/導出注冊表文件」,選擇「分支」,導出該分支注冊表信息到文件(如LI.REG)中(如下圖);把LI.REG文件COPY到顯示亂碼的機器上,在顯示亂碼機器上運行REGEDIT,選擇「注冊注冊表」/「導入注冊注冊表」,把LI.REG文件導入注冊表中。
2、在顯示亂碼的電腦上操作
如果沒有顯示正常的電腦可以利用,就需要您手工恢復字體部分注冊表項,方法有以下兩種:
第一種方法:用記事本編輯一個文件,然後保存為擴展名「REG」(文件名隨意),再用滑鼠右鍵單擊這個文件,在右鍵菜單中選擇合並,即可完成對注冊表的改動。該文本文件的內容如下:
REGEDIT4
[HKEY_LOCAL_]
[HKEY_LOCAL_Associated DefaultFonts]
"assocSystemFont"="simsun.ttf"
"FontPackageDontCare"="宋體"
"FontPackageRoman"="宋體"
"FontPackageSwiss"="宋體"
"FontPackageModem"="宋體"
"FontPackageScript"="宋體"
"FontPackageDecorative"="宋體"
[HKEY_LOCAL_Associated CharSet]
"ANSI(00)"="yes"
"SYMBOL(02)"="no"
"OEM(FF)"="yes"
"GB2312(86)"="yes" 第二種方法:在出現亂碼的電腦上,單擊菜單「開始」/運行,鍵入REGEDIT打開注冊表;找到「HKEY_LOCAL_MACHINESYSTEMCURRENT CONTROL SETCONTROLFONTASSOC」,正常情況下會有ASSOCIATED DEFAULTFONTS、ASSOCIATED CHARSET兩個文件夾,這些文件夾中正確的參數如下表所示:
·磁碟陣列(Disk Array)原理
當出現漢字亂碼時,上述兩個文件夾中內容就會不完整,有的沒有ASSOCIATED CHARSET文件夾、或其中內容殘缺不全;有的ASSOCIATED DEFAULTFONTS下內容殘缺。只要你打開注冊表,在「HKEY_LOCAL_」下,根據以上正確內容恢復即可。
六、如何消除郵件亂碼?
郵件亂碼的形成原因很多,主要有以下幾個方面,針對以下幾種形成原因,應該採取不同的亂碼消除方法:
1、收發信雙方的語種不同導致的
收發雙方使用的操作系統的不同,可以造成亂碼。比如發件人使用的是日文的Windows,而收件人使用的是簡體中文的Windows,這樣的郵件當然會造成亂碼。對於中文電子郵件,如果收信方所用的操作系統是英文環境、而且沒有外掛中文系統或未切換為中文(如南極星等)編碼方式,也會無法看到中文、只可見亂碼。所有的雙位元組字元(如中文簡/繁體的GB和BIG5碼及日文的JIS、EUC和朝鮮文的 KSC碼等)在非本語種操作系統下都會出現亂碼;同樣在中文簡體的GB碼環境下,看其他雙位元組字元時也只能看到亂碼。
【解決辦法】:安裝多語言支持包或使用多內碼顯示平台(如南極星等),對收到的郵件,根據其使用的語種切換到相應的編碼方式即可消除亂碼。
2、發信伺服器不支持8位(非ASCII碼格式)傳輸
郵件傳輸機制或郵件編碼的不同,可能造成郵件伺服器不支持8位(非ASCII碼格式)傳輸而形成郵件亂碼。例如直接發送中文或二進制等非ASCII碼格式的郵件(如中文雙位元組文件、圖片文件.jpg、可執行文件.exe或壓縮文件.zip等二進制文件)時,郵件伺服器有可能無法處理,便把信件中每個字元的第八位都過濾掉,從而造成郵件信息的失真或損壞,在收到郵件時就是一堆亂碼。
【解決辦法】:只能由發件人解決。當發送8位格式的文本文件時,必須事先進行編碼,將文件轉換為7位ASCII碼或更少位數的格式,然後才能保證文件的正確傳送。收件人收到7位或更少位格式的郵件後,可以再轉換為8位的格式,這樣就可避免亂碼。
3、收發端用的EMAIL軟體和設置不同
一般EMAIL軟體的"附件"功能都可以自動對信件先進行編碼,然後送出。這樣只要收信人使用的EMAIL軟體(如Outlook XP等)能區別信件的編碼方式,即可自動將信件解碼。如果收發件人所用的EMAIL軟體默認配置不同、收發件人自己定製的一些選項不同,在收到編碼的信件後,系統就未必能識別出信件所用的編碼方法,自然也無法自動解碼,這樣就會出現亂碼。
【解決辦法】:如果你用OE收中文郵件,看到的是一篇亂碼,可以查一下「查看」-「編碼」下,是否選了「簡體中文(GB2312)」,選對了就不會有問題。
此外,你也可以用WinZip+IE來解碼,方法是:把亂碼郵件的內容,拷貝到剪貼板中,然後將其粘貼到記事本中,存為文本文件(例如LI.txt),再將其後綴改為.uue(改為LI.uue),點擊此文件,會啟動Winzip,然後啟動IE,把Winzip中的001.txt文件拖到IE窗口中,就會顯示郵件原來的內容,而不會看到亂碼。 4、Email軟體不能識別郵件的編碼方法
郵件的編碼方式主要有:Uuencode、Base64 encode、QP-encode、BINHEX等。如果Email軟體不能識別郵件的編碼方法,就會顯示郵件時出現亂碼。因此,你可以根據郵件中的關鍵字元判斷編碼方法,選取合適的解碼軟體進行解碼。
(1)、QpencodeQP編碼
該編碼全稱「Quoted-Printable Content-Transfer-Encoding」,因為這種格式郵件的內容都是ASCII字元集中可以列印的字元,所以名稱中含有printable。大體格式為:=A1A=B1z=A6n=A1I=A7=DA=A6b=BA=F4=B8=F4=A4W=B1o......=E5==ABH=A5=F3=B0=DD=C3D=B1M=Aea=A1A......
特徵:內容通常有很多等號"=",因此不需要看"信頭"也可以判斷是否為QP編碼。
解碼辦法:把郵件中類似A1A=B1z=A6n…的部分編碼全部復制下來,貼到一個新的純文本文件中,然後在文件頭部加入Quoted-pintable格式的文件頭:
Contenet-Type:text/plain;Charset=」GB2312」
Content-Transfer-Encoding;Quoted-pintable
然後以「EML」為後綴保存文件,用資源管理器雙擊打開文件即可顯示正確的內容。如果還有部分漢字亂碼,可以用WINZIP對存檔後的EML文件進行解壓,即可看到正確的內容。
(2)MIME/BASE64 encode編碼
該編碼方式將3個位元組(8位)用4個位元組(6位)表示,由於編碼後的內容是6位的,因此可避免第8位被截掉,大體格式為:
MIME-Version:1.0
Content-Type:text/plain; charset="us-ascii"
Content-Transfer-Encoding:base64
Status:R +sXqsT6Skp OWrSKXzs
N3DRLFNrmGhQQ0Kq1+sTqq6vdCx

......。
特徵:亂碼前一般有如下幾部分"信頭":Content-Type(內容類型)、charset(字元集)及Content-Transfer-Encoding(內容傳輸亂碼方式)。
解碼辦法:用EMAIL軟體,選擇編碼中BASE64 選項就可解碼,解碼後會消除亂碼。
(3)、BINHEX編碼
這種編碼方式大體格式為:
(This file must be converted with Binhex4.0)ss
Tqq6vdCx
F6p9qoz6XOIE…….
解碼辦法:用EMAIL軟體對它解碼;也可在EMAIL軟體中保存亂碼郵件,存為後綴為「.HQX」格式的文件,然後用WINZIP解碼展開。解碼後會消除亂碼。
(4)、UTIF-7/UTIF-8編碼
它們是UNICODE的兩種轉換碼。
(5)、Uuencode編碼
這是UNIX環境下使用的編碼方式,目前已經很少用,大體格式為:
begin 644 kk.zip M1G)O;2!I;&EN+F)B3T!C(VEE+FYC='4N961U+G1W(%=E9"!.;W8@(#8@,3(ZM,SDZ,C4@,3DY-@I296-E:79E9#H@9G)O;2!F;&%B;6%I;"YF;&%B+F9U:FET.................。
end
特徵:亂碼前面含有"begin xxx",後面是編碼前的原始文件名(如kk.zip);接著是已經過編碼的信件內容(如上述的亂碼部分);最後一行為"end"
解碼辦法:可用BECKY!EUDORA等EMAIL軟體,選擇編碼中相應的選項就可解碼;也可以在EMAIL軟體中保存亂碼郵件,存為後綴為「.UUE」格式的文件,然後用WINZIP解碼展開,解碼後就會消除亂碼。 七、發信方如何避免產生亂碼郵件?
為了避免別人收到亂碼,發信方應該採取以下的措施:
1、設定默認自動為7位編碼
在郵件客戶端軟體中的書寫(撰寫)選項中,設定默認自動為7位編碼。因為當你發送 8位格式的文本文件時,必須事先進行編碼,將文件轉換為7位ASCII碼或更少位數的格式,然後才能保證文件的正確傳送。收件人收到7位或更少位格式的郵件之後,可以再轉換為8位的格式,這樣就可以閱讀了。
2、發送前在簽字欄中註明使用的漢字編碼
發送中文郵件前,最好在固定的簽字欄中註明自己所使用的漢字碼標准(例如GB2312、中文HZ、GBK等);港澳台及東南亞地區郵件作者在使用BIG5 碼撰寫完郵件、向內地發送前,要轉換成上述三種簡體國標碼中的一種形式、並在簽字欄中註明。如不轉換則可能無法閱讀,因為國內用戶使用的郵件系統有很多不支持BIG5碼。
3、正確設置EMAIL軟體
選擇優秀的Email收發軟體可以有效地解決郵件亂碼。如果使用Outlook 2003/XP,應在軟體中把「簡體中文(GB2312)作為默認的郵件使用語言,選擇「國際設置」/為接收的所有郵件使用默認的編碼。
如果使用英文EMAIL軟體,應設置成:文字設定DEFAULT CHARSET:ISO 8859-1(LATIN1);編碼方式ENCODING:QUOTED-PRINTABLE,不可選擇7位(因為7位不支持中文);字碼頁CODE PAGE(可選):936或HZ-GB-2312,以支持整字識別;郵件格式:MIME;字體:宋體
如果使用其他中文EMAIL軟體,應設置成:文字設定DEFAULT CHARSET:簡體中文GB2312;編碼方式ENCODING:QUOTED-PRINTABLE;郵件格式:MIME;字體:宋體
4、發送重要信息時先發測試信
發送重要信息時,為了確認是否無須編碼即可發送正文,應該先發送測試信。而且還應確定收件人能否對附件文件進行解碼。如果發送已經編碼的郵件,則最好添加足夠的「信頭」信息,以便收件人知道所需的解碼方法。建議對uuencode/UUDeview編碼方式用uuencoding作信頭,對mpack編碼方式用base64 encoding作信頭。
如果發/收件人之間遠隔萬里,則傳送過程中,第八位將可能被截掉。這時最好先在正文中用中文給收件人發一封測試信,並了解對方能否正確收到郵件正文。如果第八位被截掉,則收件人將會看到一些亂碼,而不是上述的uu/b64/Qp等格式,而且這種信件幾乎不可恢復。
對策:在Netscape、Eudora或Pegasus Mail等你所使用的郵件系統中,選擇其首選項或選項配置中的"Quoted Printalbe"或"MIME encoding
5、盡量利用「附件」功能發送文件
幾乎所有的郵件軟體,如Netscape、The Bat!、 Becky! 等郵件系統附加這類非標准 ASCII碼格式的文件時,附加文件通常可以自動進行「base64」方式編碼(僅對附件部分進行編碼)。在用"附件"方式發送郵件之前,無需進行編碼;否則適得其反。因為郵件軟體能夠自動成功解碼這類「附加」文件,因此在發送中文類郵件時應該首選這種方法。
如果無法以附件方式發送文件,則必須在正文中發送中文或二進制文件
八、收信方如何避免郵件顯示亂碼?
收信方應該首先查找郵件的簽字欄或正文中,有無指明對方使用的漢字編碼類別;然後在Outlook XP「視圖」菜單下選中「編碼」,隨後將出現全部的漢字編碼,在其中選擇郵件所指明的一種。
如果收到的郵件中沒有指明所用的漢字編碼,則可以順序單擊選擇編碼,直到郵件正文顯示正確為止。如果你使用的是Netscape,則可在 Option菜單下的Document Encode中選擇相應的項目。
九、在跨語種操作系統間收發電子郵件,如何保證不會亂碼?
如果對方使用非中文系統,你給他發中文郵件時,他打開你發的中文郵件,就會出現亂碼。解決辦法有兩種:
1、用繪圖軟體書寫中文郵件
用畫筆等繪圖軟體書寫中文郵件,然後把中文郵件以GIF圖形格式保存,最後壓縮之、作為郵件附件發送。
運行繪圖軟體,在圖片中輸入文字,用GIF格式保存,將屬性置為黑白模式(以減少圖片體積),然後用WINZIP把它壓縮成ZIP格式,作為附件在郵件中發送,這樣不管對方在何語言平台下,都不會出現亂碼,收信人不必去下載PDF文件閱讀器,閱讀起來也很方便。
2、使用專門的工具轉換和閱讀
EMAIL AID之類的工具可以把中文郵件轉換為AID格式文件,你把該格式文件發給對方,他再用EMAIL AID打開觀看即可。
EMAIL AID(UCWIN GOLD 1.0附帶的)可以把文本文件轉換為AID格式文件,大小隻比原TXT文件增加幾K。寫好中文郵件後,用文本格式存檔,然後你運行EMAIL AID,以AID格式保存,最後你把AID文件連同EMAIL AID軟體一起作為附件插在信中。對方收到信後,只需運行EMAIL AID,打開AID格式文件即可看到漢字,不管對方在何種語言平台下,都不會出現亂碼。

⑶ 如何過濾特殊字元和亂碼的字元

這是編碼引起的,把資料庫表的那個欄位編碼改成utf-8格式
alter
table
user(表名)
CHANGE
old(老欄位)
new(新欄位)
varchar(100)
charset
utf8
後面的內語句的編碼就是utf8,不要改成容utf-8,MySQL不識別,不用改欄位名稱就直接都寫原來的欄位名。

⑷ 如何解決用戶提交請求數據的亂碼問題

•在最近的項目中 使用了jsp+servlet來開發項目,但是由於後台的不太熟練 導致了困難重重。所幸 學習能力還可以 一邊做一遍學吧。 •今天的問題:請求轉發後頁面的亂碼問題 •由於特殊原因——圖片上傳的form表單無法通過ajax提交 因此必須使用form表單直接提交。但是這樣會導致一個問題:前後台交互的時候效果不好。為什麼效果不好?這里說的不是功能的問題。作為web開發者,客戶的體驗我們要放在第一位。因此,我們必須將對客戶的信息反饋放在一個比較重要的地位。說白了,就是上傳個圖片成沒成功?我發布的信息是否成功的上傳了?如果你上傳東西的時候網頁沒反應,或者直接就跳轉到其他頁面,他會以為可以了,但是實際上沒有上傳到伺服器上,原因可能很多,比如說是我現在的網路不好,或者文件太大了,或者是你的文件不支持,但是這作為不懂代碼的用戶來說是很難理解的,他們會認為你的網站做的實在是太垃圾了。 •因此,我們才會費盡心思的去為客戶去思考,把他們想知道的信息傳達給他們。 •理所當然,ajax很實用,但是在文件流的情況下是無法通過ajax上傳數據的。 •於是 request.getRequestDispacher('url').forward請求轉發和重定向派上了用場。而重定向是無法共享數據的,因此只能使用請求轉發。 •在此,文件為uploadServlet和user.jsp頁面。當上傳購物的信息時候,我所有信息已經插入到後台,需要為用戶返回信息說,你成功了。那麼傳統的方式,request.setAttribute()很實用,在jsp頁面上用request獲取值判斷是否成功就可以了。 •但是 轉發回來之後 頁面亂碼了。。。 •經多方查找資料,終於找到解決方案; •過濾器 配置成過濾所有的文件。 •現粘貼如下: package com.java.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; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EncodingFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } •web.xml配置: <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.java.Filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 以上這篇請求轉發jsp頁面亂碼問題的快速解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

⑸ java 字元串中亂碼過濾

new String(str.getBytes(),"GBK");
用這方法,把亂碼正確顯示。當然編碼要自己設

⑹ SQL SERVER 2008中輸入漢字亂碼,加了過濾器也不管用

用命令語句添加不會出現,但是在頁面添加就不行
說明資料庫里表的編碼是正常的,寫入數據的時候出錯
那就兩種可能
1、檢查頁面控制項給後台傳值的時候是不是自動轉碼了。
2、後台接收數據的變數的格式是不是UTF-8。

⑺ struts2中如何用過濾器處理中文亂碼

<!-- 亂碼過濾器 -->
<filter>
<filter-name>CharaterencodeFilter</filter-name>
<filter-class>com.CharaterEncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharaterencodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

放在web.xml里
相應的類也給你
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;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
public class CharaterEncodeFilter implements Filter {
private FilterConfig config = null;

public void destroy() {
this.config = config;
}

public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}

public void init(FilterConfig arg0) throws ServletException {
config = null;
}

}

⑻ jsp編碼UTF-8,action編碼GBK,jsp頁面參數經過幾次轉向(jsp-action-jsp-action-jsp)亂碼問題怎樣解決

添加一個過濾器 .將輸入輸出都設為utf-8 試試
public class Filter implements javax.servlet.Filter {

public void destroy() {

}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain cha) throws IOException, ServletException {

req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
cha.doFilter(req, res);
}

public void init(FilterConfig arg0) throws ServletException {

}

}

<filter>
<filter-name>filter</filter-name>
<filter-class>com.util.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

⑼ 如何配置Filter過濾器處理JSP中文亂碼

注意問題:在學慣用selvert的過濾器filter處理中文亂碼時,在filter配置初始化時用了utf-8處理中文亂碼,而在提交的jsp頁面中卻用了gbk。雖然兩種都可以出來中文亂碼,但是卻造成了處理亂碼的格式不一致。所以編譯出錯。
解決方法:所有地方都用utf-8或gbk

//過濾器類
CharactorFilter.jsp
package cn.com.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 CharactorFilter implements Filter { //繼承Filter類
//字元編碼
String encoding=null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(encoding!=null){
//設置request字元編碼
request.setCharacterEncoding(encoding);
//設置response字元編碼
response.setContentType("text/html;charset="+encoding);
}
//傳遞給下一個過濾器
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
//獲取初始化參數
encoding=filterConfig.getInitParameter("encoding");
}
public void destroy() {
// TODO Auto-generated method stub
encoding=null;
}
}

web.xml
<filter> <!--注意這里是filter,不要配置成servlet-->
<filter-name>CharactorFilter</filter-name> <!--過濾器名稱-->
<filter-class>cn.com.Filter.CharactorFilter</filter-class> <!--過濾器的完整類名-->
<init-param> <!--初始化參數-->
<param-name>encoding</param-name> <!--參數名稱-->
<param-value>utf-8</param-value> <!--參數值-->
</init-param>
</filter>
<filter-mapping> <!--過濾器映射-->
<filter-name>CharactorFilter</filter-name><!--過濾器名稱-->
<url-pattern>/*</url-pattern><!--URL映射,給所有頁面處理亂碼-->
</filter-mapping>

閱讀全文

與用戶輸入亂碼過濾相關的資料

熱點內容
賓館的廢水排水量 瀏覽:237
污水池護欄安裝多少錢一米 瀏覽:943
雨水收集回用系統品牌 瀏覽:847
有機樹脂類廢物主要危害成分 瀏覽:795
測量純水用什麼儀器測量 瀏覽:243
反滲透膜進口和國產價格差別 瀏覽:187
魚缸過濾設計圖紙 瀏覽:506
飲水機和花灑各什麼價 瀏覽:659
沉雨凈水是什麼意思 瀏覽:744
農村別墅屋頂用樹脂瓦選什麼顏色 瀏覽:790
廈門前場污水處理廠 瀏覽:634
springmvc多個過濾器 瀏覽:907
凈水器一g代表什麼 瀏覽:546
生物方法在污水處理中的應用 瀏覽:281
污水管過河走河底用什麼管 瀏覽:158
豪爵鷹鑽125空氣濾芯怎麼更換 瀏覽:452
ro膜中的白色 瀏覽:126
卧式機油濾芯如何安裝 瀏覽:469
德國生活污水處理 瀏覽:988
超濾濃縮膜包進液出液區分 瀏覽:384