2017-02-21 92 views
1

這裏是一個奇怪的場景。在Java Web應用程序中爲所有jsps設置默認字符編碼

我有一個支持UTF-8字符的Java Web應用程序。這是他們展示,並且可以在應用程序中輸入

我也有其他的應用程序,訪問前一個如下基本片斷

final URL urlObject = new URL("someurlyadayada"); 
final URLConnection connection = urlObject.openConnection(); 
... 
.... 
connection.connect(); 
final InputStream is = connection.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is,"UTF8"); 
final OutputStream out = new FileOutputStream(new File(somelocalfile)); 
OutputStreamWriter osw = new OutputStreamWriter(out,"UTF8"); 

int read = 0; 

while ((read = isr.read()) != -1) { 
    osw.write(read); 
    } 
.... 

當給定的頁面在瀏覽器中都觀察呈現精細UTF-8人物和所有。但是,當使用上面的片段字符已損壞要麼回來作爲???????或只是錯誤的字符。

我到目前爲止所嘗試的是在輸入/輸出流編寫器上以及在應用程序中的請求和響應對象上將編碼設置爲UTF-8。

這部分工作在給定一個JPS下列行

Прочтено Прочтено,Прочтено, 
<%=someJavaMethodWhichReturnsTheAboveLineAlso()%> 

在瀏覽器中此呈現細如:

ПрочтеноПрочтено,Прочтено,

ПрочтеноПрочтено,Прочтено ,

但使用頁面分析器將返回

оÑÑÐμноÐÑоÑÑÐμноÑоÑÑÐμноÐÑоÑÑÐμно

ПрочтеноПрочтено,Прочтено,

如果我在我的所有網頁的JSP的頂部設置contentType="text/html;charset=UTF-8"它解決了這兩個問題,但我有被上級告知,更新100個JSP是不可能的。

我也得到了印象,這是我應該能夠設置一次,並將其用作默認值。

這裏最好的做法是什麼。我有兩個關於在JSP上設置內容的思想。不知道這是做錯了還是我們錯了,從來沒有做過這件事。

我有一個很好看周圍的解決方案和成敗參半

回答

0

您可以配置在web.xml文件中所有JSP默認的字符編碼,這樣,它在全球範圍做

<jsp-config> 
    <jsp-property-group id="defaultUtf8Encoder"> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group>  
</jsp-config> 

還可以做什麼,是創建一個過濾器,其設置響應字符編碼(並最終內容類型),因爲這樣的:(下面的例子確實的字符編碼)

public class CharsetFilter 
    implements Filter { 

    String encoding = "UTF-8"; 

    public void destroy() { 
    /* Do nothing */ 
    } 

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

    response.setCharacterEncoding(encoding); 
    chain.doFilter(request, response);   
    } 

    public void init(FilterConfig config) throws ServletException {  
    } 
} 

然後你在網絡中定義過濾器。xml文件

<filter> 
    <filter-name> 
     charsetFilter 
    </filter-name> 
    <filter-class> 
     your.filter.package.CharsetFilter 
    </filter-class>   
</filter>           

<filter-mapping> 
    <filter-name>charsetFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

請注意,我將過濾器應用於使用任何Web應用程序資源的/ *。如果你想過濾器影響每一個網絡資源,這可能會很方便

希望這應該排序你

+0

刪除我以前的評論。這除了我的其他變化(輸入/輸出流似乎工作,我忘記了我已經添加了代碼嘗試設置內容類型的代碼,一旦我刪除我的代碼它的工作。 –

相關問題