对于Java中汉字编码的万能思路

经常在Java开发中遇到中文问题,网上也有很多如何解决中文问题的文章、帖子,无非两类,1)原理类,介绍汉字编码的原理,可能出现问题的地方及解决办法;2)Tip类,集中常用的解决代码片段。个人支持第一种文章,毕竟“授人以鱼,不如授人以渔”嘛。

但是实际开发中,大家的开发环境却不大相同,OS不同、DB不同、Application Server不同、JVM不同这些都有可能会导致不同的可能,很多情况下是:同样的new String(originalStr.getBytes("ISO8859_1"),"GBK"),在某些机器上可用,另外一些上却行不通。 怎么办????

一种比较好的编程习惯是:从数据库的存储编码、到Model及业务逻辑层的处理过程,再到页面的显示层都使用同一种编码格式,这样会减少很多会发生错误的可能。

但这样还是会有可能发生中文问题。这些问题很难发现(一般是IO时,JDK或者其他代码做的默认编码导致的),很可能就如论如何也改不过来了。

别着急,这里告诉大家一个万能的解决办法:
1、使用Eclipse等可以进行Debug的IDE工具。
2、在出现乱码的地方设置breakpoint(一定是源头,如果是ResultSet可以看其rows属性中的原始数据),跟踪执行到此处;
3、在Eclipse中用Add Watch获取该String的getBytes,记录下其相应的值。开始使用不同的编码进行尝试,直到可以显示正确为止;
4、常用的一些技巧:看String.getBytes的长度,如果一个汉字对应两个字节,一般用getBytes("8859_1")之后转UTF-8或者GBK都可以,如果是两个以上个字节,那就要看是否是Utf-8或者UTF-16, ISO10646等编码了。

通过这种方法,一般都可以顺利的解决中文问题。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值