为何struts不支持中文

    在使用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));
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值