Struts的ResourceBundle的中文问题的罪魁祸首是java.util.Properties有问题,与Struts本身无关。因为Struts的PropertyMessageResources用java.util.Properties来读入属性文件。你如果有兴趣可以打开jdk带的源代码看看java.util.Properties的load方法的第一行:
BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "8859_1"));
居然是以8859_1编码来读入所有的属性文件。
可以的,不过我不是直接改JDK的源码,因为担心JDK重新打包麻烦,而是写了一个类来替代Propertiess,因为没有足够的时间,所以只是继承了java.util.Properties,把load的第一行改为BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
然后创建两个类分别用来代替PropertyMessageResources和PropertyMessageResourcesFactory。也只是简单的改了PropertyMessageResources的loadLocale方法中Properties props = new Properties();这一行。然后分别在web.xml的action servlet的配置中加入factory参数,值设为改过的PropertyMessageResourcesFactory,在struts的配置文件中把message-resources的factory属性设为改过的PropertyMessageResourcesFactory,就彻底解决了读属性文件的中文问题。不需要用native2ascii先转换属性文件。