2017-01-05 37 views
1

我修改了the embedded-jetty project以創建a stand-alone jsp-viewer(具有完整源代碼的一個文件)。結果工作正常,但是在顯示包含特殊字形的JSP時遇到問題。問題是而不是發送標記時未設置Content-Type,但呈現的標記出現亂碼(在view-source中或通過curl)。必須使用錯誤的字符編碼讀取JSP文件,但使用-Dfile.encoding=UTF-8啓動jvm將不會執行任何操作。呈現的JSP標記出現亂碼UTF-8字符

這些字符串

Butikknavn – et smartere valg 
få ekstra fordeler når 

變得

Butikknavn â<80><93> et smartere valg 
få ekstra fordeler når 

編輯:只是不言自明的,內容首部已經被設置,如可從原始的HTTP響應中可以看出

Content-Type:text/html;charset=utf-8 
+1

您的JSP是否指定'pageEncoding'和'contentType'?即它是否包含像'<%@ page language =「java」contentType =「text/html; charset = UTF-8」pageEncoding =「UTF-8」%>'? –

+0

添加'<%@ page pageEncoding =「UTF-8」%>'訣竅!其他屬性沒有影響。思想張貼作爲答案,所以我可以給你一些觀點?附:你知道如何以編程的方式做到這一點,所以這不需要在每個頁面上?普通的Tomcat服務器在不需要這個的情況下開箱即可正確完成任務,因此可以以某種方式進行。 – oligofren

回答

1

你必須

<%@ pageEncoding="UTF-8"%> 

添加到您的JSP文件(S)。

-Dfile.encoding=UTF-8應該爲整個Jetty實例做pageEncoding="UTF-8"部分,遺憾的是,正如你所提到的那樣,它並不是。您也可以嘗試將<page-encoding>UTF-8</page-encoding>添加到您的web.xml(如here所述),但我從未嘗試過。

+0

因爲我正在運行嵌入式碼頭實例,所以沒有web.xml,如上所述。 – oligofren

0

您的HTTP響應可能缺少內容類型標題。嘗試添加一個如下:

Content-Type: text/html; charset=utf-8 
+0

正如我在第一段中明確提到的,這不是問題所在。這不是瀏覽器如何呈現網頁,而是傳輸的標記是問題所在。內容類型標題已被設置。 – oligofren

+0

@Josef Chocholacek的答案具有正確的細節,正如指定頁面編碼一樣。我仍然希望以編程方式完成它。 – oligofren