exceljava的专栏

万里彤空/寒鸦一点/千里浮萍/孤舟一片/莫管落叶萧萧下/我自江水滔滔流

转载 为何struts不支持中文收藏

新一篇: 简单的javamail发邮件 | 旧一篇: 常用正则表达式

在使用struts的资源文件,如果资源文件中有中文字符,直接使用就是乱码。我们一般是把资源文件用java的native2ascii.exe命令把资源文件中字符全部转换为Ascii码,也有通过自己实现过滤器来转换。
    为什么struts资源文件不支持中文呢?查看struts原码:org.apache.struts.util.PropertyMessageResources类中的244和259行可以发现,它是调用的java.util.Properties来读取资源文件的。那这么看来struts不支持中文的原因应该在java.util.Properties上面。
    java.util.Properties是通过InputStreamReader来把InputStream适配为Reader类的。InputStream是针对byte(8位),而Reader是针对char(16位),要支持中文也必须得用16位的Reader,既然java.util.Properties已经通过InputStreamReader来把InputStream适配为Reader类,那为什么还是不支持中文呢?查看java.util.Properties类的load()方法就一切都明白了,java.util.Properties的189行:
    BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "8859_1"));
    原来它在构造new InputStreamReader时使用了"8859_1"编码,把中文用"8859_1"编码来处理当然会是乱码。如果此处在构造时指定"GBK"编码,或不指定让它采用系统的本地编码,就不会出现乱码问题了,真纳闷,为什么java工程师不让它自己按照系统的本地编码,而要指定"8859-1"呢?可能是是因为他认为8859-1在满足大多数用户的需求和节省空间上是性价比最高的吧。对于我们自己使用的中文配置文件,完全可以自己来实现。
    BufferedReader in = new BufferedReader(new InputStreamReader(inStream));

 

发表于 @ 2007年08月25日 21:34:00|评论(loading...)|编辑

新一篇: 简单的javamail发邮件 | 旧一篇: 常用正则表达式

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © exceljava