ant編譯之後jsp出現亂碼

最近幾天碰到一個Ant編譯後,出現亂碼的問題,糾結了幾天,目前應該算是解決了。事情是這樣,手頭有一個java的工程,由於是在windows下開發的,所以源碼的編碼格式均爲gbk,之前工程的編譯都是在windows環境下進行,所以一直也沒有問題。最近由於環境管控需要(《在Linux下的用戶特殊操作權限控制》),嘗試在Linux環境下進行自動編譯和部署,因此就出現了編譯出來的應用有亂碼的問題,查了幾個地方,已確定是ant的javac和copy指令的參數配置問題,在這裏把過程中學習到的知識記錄一下。

首先是Java的編譯和運行機制,從.java編譯爲.class的過程中,javac會默認按照編譯所在操作系統的默認編碼讀取源代碼,並編譯成內部爲UTF-8編碼的.class,而在java虛擬機執行的過程中,會按照程序運行所在操作系統的默認編碼,將UTF-8編碼再次進行轉換。通過這種兩次轉換的方式,Java實現了對多語言的支持。

要改變javac讀取源代碼時採用的編碼格式,如指定爲GBK編碼讀取,需要在執行javac時添加-encoding=GBK參數進行指定;而要改變java運行時輸出的編碼格式,則需要添加-Dfile.encoding=GBK參數進行指定。而在ant的build.xml文件中,對應是在javac任務中,添加encoding屬性,就解決了在默認爲UTF-8編碼的Linux環境下,讀取編譯GBK編碼內容的問題,至此,已經解決了我工程中大部分的編譯問題。

另一個問題出現在Ant的copy任務中,由於程序中的部分內容,是在ant執行過程中通過交互界面輸入並設置filtering進行替換的,但Ant在Linux下執行時,也是按照操作系統默認編碼UTF-8讀取文件和進行替換,就導致了GBK的程序在替換後出現了亂碼,無法編譯通過。要解決這個問題,則是在Ant的copy任務中,添加encoding="GBK"參數,指定讀取文件的編碼爲GBK,也就解決了這個問題。關於copy的參數說明,可以參見官方手冊


轉載 http://www.wswing.net/archives/313.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章