<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 3,  comments - 6,  trackbacks - 0
    上次的gsp中文編碼問題,我在grails的源碼找到了問題的所在。
    grails的gsp servlet程序是通過org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine對gsp進行編譯和解釋的,再此過程中同包下的Parse類負責了最基本的詞法檢查。但是Parse的readStream(InputStream in)讀取gsp文件時,簡單采用了ByteArrayOutputStream的toString()函數,這個函數只采用系統默認編碼進行識別。也就是在這里產生了gsp依賴與操作系統默認編碼集的問題。
    既然如此,猜測有一個并不完美的解決方法:通過file.encoding系統屬性來指定虛擬機的默認編碼集。
    比如:grails run-app -Dfile.encoding=GBK
    結果又出乎我的意料,這樣并不能工作,似乎是由于grails本身生成幾個文件是UTF8編碼的,強行指定GBK編碼后會有問題。

    看起來,如果你希望部署打包好的war程序包的話,沒有好方法,只能選擇編碼集相同的環境!

    我認為好的方法應該是grails支持在gsp的servlet配置中增加一個叫做fileEncoding的初始化參數,在讀取文件時應用此參數。這樣大家就可以根據自己的喜好選擇開發grails的環境了。不過目前GroobyPagesServlet類與Parse類之間還隔了GroovyPagesTemplateEngine,并且這個GroovyPagesTemplateEngine的單例初始化是在其他地方完成的,要想實現這個參數比較繁瑣。

    或者要想簡單的話就干脆寫死Parse中使用UTF8,這也是個不錯的選擇,eclipse之類的開發工具對UTF8的支持很好,其他開發工具應該沒有不支持UTF8的吧。這樣就要求大家都是用UTF8編寫gsp,反正文件中絕大多數都還是英文字符,也沒多占幾個字節。

    如果上面的方法都不喜歡怎么辦?我還有一個辦法,就是不要在gsp中寫ISO-8859-1字符以外的任何東西,使用i18n輸出你期望的中文字符。其實也就是順帶著把網站所有資源國際化了,呵呵,一舉兩得。不過以我的體驗來說,真要這樣做的話,通常你是會抓狂的,properties文件將超出你想象的瘋長,那個郁悶呀。
    而且還要注意,雖然grails說可以配置在發布時把properties文件自動做native2ascii,但是現有會有類似的問題:原始的properties文件的native編碼是什么?最好還是找個properties的編輯工具,直接保存成ascii的unicode轉碼比較好。
    posted on 2007-09-17 22:39 Tiger F 閱讀(1749) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 污视频网站免费观看| 亚洲欧美中文日韩视频| 一级做a爰片久久免费| 国产禁女女网站免费看| 亚洲私人无码综合久久网| 大地资源二在线观看免费高清| 亚洲第一成年人网站| 精品无码人妻一区二区免费蜜桃 | 青青操视频在线免费观看| 亚洲人成影院在线观看| 一级**爱片免费视频| 国产综合亚洲专区在线| 成人免费av一区二区三区| 国产亚洲精品岁国产微拍精品| a毛片在线免费观看| 亚洲国产精品婷婷久久| 曰批全过程免费视频网址| 2020亚洲男人天堂精品| 日韩电影免费在线| 四虎影视久久久免费观看| 久久久久亚洲AV无码专区网站| 三级网站免费观看| 亚洲国产成人精品久久| a级毛片无码免费真人| 青青青亚洲精品国产| 久久精品国产亚洲Aⅴ香蕉| 日本高清高色视频免费| 亚洲国产成人精品青青草原| 韩国免费三片在线视频| 人成免费在线视频| 亚洲国产精品一区| 成人黄动漫画免费网站视频| 四虎一区二区成人免费影院网址 | 91嫩草免费国产永久入口| 亚洲情A成黄在线观看动漫软件 | 成人免费无码视频在线网站| 日本一区二区三区在线视频观看免费 | 国产亚洲综合色就色| 亚洲成人免费在线观看| 精品亚洲国产成人av| 亚洲VA中文字幕不卡无码|