2017-03-06 41 views
0

我遇到了編碼和碼頭問題。碼頭9,字符編碼UTF-8

我的所有文件都以UTF-8編碼,幷包含正確的HTML元標記以指定UTF-8。

到現在爲止,我的所有UTF-8文件都有BOM,而且我沒有問題。但是現在我正在使用不同的文本編輯器,並且我注意到現在生成的我的UTF-8文件沒有BOM,從我閱讀的內容來看,這是一件好事,因此我決定從現在開始不使用BOM。

但問題是,如果Jetty沒有BOM,它似乎將所有JSP文件轉換爲ISO8859-1,然後再將它們發送到瀏覽器。它會導致問題,因爲由於它們具有用於UTF-8的元標記,所以瀏覽器將文件解釋爲UTF-8,並且重音符號和其他特殊字符不起作用。

我找到了一個解決辦法,到目前爲止這是開始用我所有的JSP文件:

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

這工作,但它是kindof煩人,因爲我必須在每個文件的開頭添加了這一點,我寧願有一些服務器範圍的參數來避免這種情況,如果可能的話,但因爲我花了幾個小時瀏覽網絡尋求解決方案,我開始認爲沒有。

我試圖

JAVA_OPTIONS+=("-Dfile.encoding=UTF-8") 

碼頭開始時如在其他線程建議添加到我的JAVA_OPTIONS,但它似乎並沒有做任何事情。

任何幫助將不勝感激。

回答

2

看起來你只是缺少pageEncoding屬性。

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

OP願意找到一個像寬參數的方式來設置編碼,而不是通過JSP。 – mob41

+0

Apache Jasper JSP引擎完全控制在這裏。 Jetty遵循Apache Jasper JSP引擎生成的Servlet行爲和原始輸出字節,並將這些字節發送到客戶端。 Jetty唯一能做的就是應用'Transfer-Encoding'(分塊)或'Content-Encoding'(gzip)。 –

+0

謝謝你,它的工作原理和解釋有助於理解它的工作原理。這比沒有好。 – gouessej

0

,在處理上碼頭UTF-8編碼的文件的情況下工作對我的另一種選擇是改變webdefault.xml內容支持UTF-8編碼,而不是默認的ISO-8859-1。

您可以找到{{JETTY_HOME}}的/ etc/webdefault.xml

<locale-encoding-mapping> 
    <locale>en</locale> 
    <encoding>UTF-8</encoding> 
</locale-encoding-mapping> 

希望這有助於此文件。