網上很多人都建議用native2ascii把資源文件轉為ISO-8859-1編碼,
但是這樣就使用修改等變得麻煩起來,當然可以用ant、bat等來處理(建議ant),呵呵。
此時想介紹一下編程的方式,讓你直接用任何編碼格式的資源文件都有是OK的。
默認情況下ResourceBundle取得Bundle調用了ResourceBundle.Control類中的
newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
,而此方法實際上生成并返回
PropertyResourceBundle
即用了這個構造函數
PropertyResourceBundle(
InputStream stream)
JDK.API文檔中有說"使用此構造方法讀取的屬性文件必須使用 ISO-8859-1。"
這就是為什么你要用native2ascii把資源文件轉為ISO-8859-1編碼
再請請看這一構造函數
PropertyResourceBundle(
Reader reader)
JDK.API文檔中有說"與
PropertyResourceBundle(InputStream)
構造方法不同,關于輸入屬性文件的編碼沒有限制。"
如此解決方案有了,只要重寫下面這一方法調用
PropertyResourceBundle(
Reader reader)不就OK了嗎?
ResourceBundle.Control類中的
newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
追加一點:如果你不知道自己的資源文件的編碼或者資源文件是別人寫的,你寫程序時不知道,
你可以用cpdetector_V**.jar,這個可以用來檢測到文本文件的編碼的