2013-08-16 114 views
1

我正在開發一個使用Java EE和Spring的網站,需要輸出中文UTF-8字符。我有一個servlet執行request.getRequestDispatcher(...)。轉發(請求,響應)到一個jsp處理後。在這個servlet,做前鋒之前,我有中文UTF-8字符在Weblogic 10.3中顯示不正確,但不是Tomcat 6

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

在JSP文件的頂部(在我的項目中的每個JSP文件),我有:

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

作爲一個測試,我在該jsp頁面上有一箇中文UTF-8字符硬編碼。當我將這個應用程序部署到Tomcat 6並點擊servlet時,瀏覽器檢測到頁面是UTF-8並輸出中文字符:採 當我將它部署到Weblogic 10並擊中servlet時,瀏覽器檢測到頁面是UTF- 8但顯示:

在我的weblogic啓動腳本中,我嘗試了-Dfile.encoding的不同java選項,例如UTF-8和utf8,但中文字符不管設置如何都是亂碼。

在weblogic.xml我有這樣的:

<charset-params> 
    <input-charset> 
     <resource-path>/*</resource-path> 
     <java-charset-name>UTF-8</java-charset-name> 
    </input-charset> 
</charset-params> 

<jsp-descriptor> 
    <encoding>UTF-8</encoding> 
</jsp-descriptor> 

在web.xml中我有這樣的:

filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
... 
<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group> 
</jsp-config> 

但這些都沒有解決的問題。

我所有的源文件都是UTF-8編碼的。

而且,當我有一個.JSP或與它中國字符的.html頁面,並直接訪問它,而不是通過在WebLogic中的servlet轉發給它的,中國的字符顯示正常。在我的servlet中,我甚至不執行向jsp的轉發,而是直接將中文字符寫入響應(使用response.getWriter()。write()),但中文字符仍然是不正確(即使瀏覽器正確地確定編碼是UTF-8)。

爲什麼它在Tomcat 6中工作,但不是Weblogic 10?我如何讓角色顯示?

+0

JSP編譯器(JSP源代碼編碼)也可能是一個因素。嘗試使用u編碼的字符,如'\ uF91F'(蘭)。如果該字符顯示正常,那麼JSP源文件不會以UTF-8格式顯示。 (雖然不太可能) –

回答

1

雖然我不知道爲什麼寫字的響應直接導致無法正確顯示中國文字,我已經想通了什麼導致文字轉發到時候是不正確的一個jsp頁面。我轉發的jsp頁面執行c:另一個jsp頁面的導入。 Tomcat和Weblogic的處理方式不同。爲了確保導入的文件具有正確的編碼,我需要在c:import標記中指定屬性「characterEncoding =」UTF-8「」,並導致導入的標記以正確的編碼輸出。似乎默認的字符編碼在不同的應用服務器之間有所不同,這取決於c:import依賴的任何代碼(並且這可能解釋了爲什麼直接從servlet響應編寫字符的原因是我想在Tomcat中工作,而不是Weblogic)。

0

也許這有助於

<?xml version="1.0" encoding="UTF-8"?> 
<weblogic-web-app> 
    <jsp-descriptor> 
     <encoding>UTF-8</encoding> 
    </jsp-descriptor> 
    <charset-params> 
     <input-charset> 
      <resource-path>/*</resource-path> 
      <java-charset-name>UTF-8</java-charset-name> 
     </input-charset> 
    </charset-params> 
</weblogic-web-app> 
+0

我已經有這個了。 – chairbender

相關問題