2012-03-22 67 views
7

Tomcat不能正確編碼包含unicode字符的字符串文字。問題發生在Linux服務器上,但不在我的開發機器上(Windows)。它僅影響字符串文字(不是從數據庫或從文件中讀取的字符串!!!)。如何在tomcat上使用UTF-8

  • 我已經在Connector標記(server.xml)上設置了URIEncoding="utf-8"
  • 我已經使用了setCharacterEncoding()。
  • 我查看堆棧跟蹤(沒有可能設置編碼的過濾器)。
  • 我已經設置LANG環境變量
  • 我cheched HTTP標頭和它們是正確的(內容 - 類型= text/plain的;字符集= UTF-8)
  • 我檢查了編碼在瀏覽器,它是正確(UTF-8)

以上都沒有工作。關於我可能錯過的任何想法?

public class Test extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    resp.setCharacterEncoding("utf-8"); 
    resp.setContentType("text/plain;"); 

    Writer w = resp.getWriter(); 
    w.write("Μαλακία Latin"); //Some unicode characters 
    w.close(); 
} 

以上顯示在瀏覽器中。 ÎÎÎÎÎÎÎÎκάLatin

+2

確保源java文件具有utf-8編碼集。我使用Notepad ++來檢查這一點。打開文件並檢查「編碼」菜單。如果編碼不是UTF,則剪切源文件的全部內容,更改編碼,粘貼剪貼板中的內容並保存源文件。 – 2012-03-22 12:55:56

+0

如果您在十六進制編輯器中查看服務器響應,返回的實際字節序列是什麼?什麼是你的源文件的編碼? – Mikaveli 2012-03-22 12:56:19

+0

*「問題發生在Linux服務器上,但不在我的開發機器上(Windows)。」*您如何部署到Linux?你是否一個接一個地傳輸文件?如果是這樣,怎麼樣?通過FTP?如果是這樣,你是在二進制模式下傳輸? – BalusC 2012-03-22 13:00:17

回答

4

當編譯時,通過傳入-encoding'utf-8'或-encoding'iso-8859-1',當javac讀取文件時,您可以強制編碼文件。只要確保它匹配你的.java文件實際編碼爲的任何編碼。

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html

- 編碼編碼中設置的源文件的編碼名稱,如EUC-JP和UTF-8。如果未指定-encoding,則使用平臺默認 轉換器。

+0

this,或者在java代碼中使用unicode轉義序列而不是字符。 – jtahlborn 2012-03-22 13:47:18

3

嘗試設置file.encoding系統屬性,例如-Dfile.encoding=utf-8在Linux JVM命令行上

+0

你非常接近。我需要在運行javac時添加這個。我困惑的是,我沒有這個選項運行javac,它工作正常。但是,當ant調用javac時,它可能會設置另一個默認編碼。 – idrosid 2012-03-22 13:32:10

+0

這爲我解決了一個問題,我的.jsp包含一個UTF-8編碼的HTML文件片段。添加此參數可以正確加載文件。 – JBCP 2012-11-06 03:43:37

+0

更多選項位於http:// stackoverflow內。com/questions/11342884/change-tomcats-charset-defaultcharset-in-windows – 2014-08-07 09:15:05