2012-10-19 69 views
2

我目前在我的jsp頁面中使用如何解決UTF-8在java中

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

當我使用request.getParameter("...");從文本框中獲取數據時,它將檢索像這樣的數據öÉ?É?É?öİ。當我使用不是英文字符的字符時,我看到了這個問題。我在tomcat中添加URIEncoding="UTF-8"server.xml。但它檢索到相同的(öÉ?É?É?öİ)。如何解決它?

謝謝

編輯

謝謝您的回答。我嘗試了一些東西,但沒有解決問題。

這裏是我做了什麼:

  • 我在server.xml中添加<Connector URIEncoding="UTF-8" .../>

  • <meta ... charset=utf-8>標籤就可以了,我試圖request.setCharacterEncoding("UTF-8");

  • 我也試過在web.xml <filter>標籤

這些措施都解決了這個問題。我想知道是否還有其他錯誤...(記住:我使用<form method='post'>。我點擊提交按鈕,當我使用request.getParameter("..")獲取數據時,此數據的格式不是正確的格式。)

+0

看到這個相關的文章 - http://stackoverflow.com/questions/2281236/jsp-form-encoding –

+0

字符串硬編碼到您的應用程序或從屬性文件讀取? – dngfng

+0

即使如此,它不是那麼幹淨,你可能需要在啓動時設置環境變量-Dfile.encoding = UTF8 – dngfng

回答

2

您可以試試這個代碼在你的Servlet中

if(request.getCharacterEncoding() == null) { 
    request.setCharacterEncoding("UTF-8"); 
} 
+0

request.getCharacterEncoding()爲null,但它沒有解決我的問題 – kamal

+0

也許你也可以嘗試'response.setContentType(「text/plain; charset = UTF-8」)' –

+0

這也沒有解決 – kamal

2

可能是因爲實際字符編碼不是UTF-8?如果字符本身以其他格式編碼,那麼我們就不能將它們標記爲UTF-8。

嘗試通過給出各種字符集來解碼它們,並查看哪一個給出正確的結果。我認爲輸入字符編碼是latin1(ISO-8859-1)。如果是,請按照以下代碼

String param1 = request.getParameter("..."); 
if(param1!=null) 
{ 
    param1 = new String(param1.getBytes("ISO-8859-1")); 
} 
+0

這段代碼沒有解決我的問題 – kamal

1

還有另一個地方可以檢查。您是否在JSP文件中包含以下聲明?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

我認爲問題是,瀏覽器仍然將使用默認ISO-8859-1,這是標準的字符集,如果沒有聲明的請求。

您還可以檢查從服務器收到的HTTP標頭,以確保發回正確的字符集。

+0

檢查頭是非常重要的。此外,關於字符編碼的Tomcat常見問題頁面也很有幫助。 http://wiki.apache.org/tomcat/FAQ/CharacterEncoding – chooban

0

基本上最乾淨的方法是在屬性文件和/或代碼中使用Unicode(如果需要的話)(不提供建議)。

這樣你可以避免所有的編碼問題,因爲你的程序只處理ASCII碼,所以正確的重新渲染然後被客戶端實實在在地處理,你不必擔心標準的os編碼或環境編碼。

2

應該在應用程序的所有層中設置UTF 8。

執行以下

1)HTML代碼

<meta contentType="text/html; charset="UTF-8"/> 

2)瀏覽器設置爲IE瀏覽 - 編碼 - 的Unicode(UTF-8)

3)Tomcat服務器 服務器.xml - 在連接器標籤中添加了「URIEncoding」屬性作爲

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" URIEncoding="UTF-8"/> 

catalina.sh/catalina.bat - 加入以下

set JAVA_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 

set CATALINA_OPTS=-Dfile.encoding="UTF-8" 

4)MIME類型的響應應該是 「應用程序/ x WWW的形式進行了urlencoded」

+0

1和2都可以。第三 - 我將URIEncoding添加到'server.xml'。 catalina.sh/catalina.bat在哪裏? – kamal

+0

在Tomcat安裝的bin目錄中 –

+0

第3步對我很有幫助! – Ryan

0

還可以嘗試加入以下濾波器在web.xml中:

<filter> 
<filter-name>Character Encoding Filter</filter-name> 
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> 
    <init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF-8</param-value> 
    </init-param> 
</filter> 

希望這有助於

0

你應該嘗試一下

String content= request.getParameter("content"); 
if(content!=null) 
    content = new String(content.getBytes("ISO-8859-1"));