对于Java中汉字编码的万能思路
2006-10-23 10:35
204 查看
经常在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等编码了。
通过这种方法,一般都可以顺利的解决中文问题。
但是实际开发中,大家的开发环境却不大相同,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等编码了。
通过这种方法,一般都可以顺利的解决中文问题。
相关文章推荐
- Java 解决数据库中信息乱码的问题,万能思路!
- java_web当中客户端-服务器端对于中文编码格式的处理
- java高并发的解决思路
- 用java给php写个万能接口
- Java 框架思路.doc
- [置顶] java 服务降级开关设计思路
- Java中对于Collection类中Stack使用的一点需要记住的地方
- java多线程对于多核cpu来说输出无先后顺序
- 使用java注解 加Spring AOP 处理接口异常逻辑的一个思路
- Java使用基本字节流OutputStream的四种方式对于数据复制(文本,音视频,图像等数据)
- 阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
- 对于java中运算符‘%’的理解
- java中对于日期的处理
- Effective Java之对于实例控制,枚举类型优于readResolve(七十七)
- Java实现对于文件的多种操作,复制、删除、重命名、剪切文件、统计指定类型文件数等10个功能
- 大家对于Java程序猿转Object-c有什么好的建议?
- 在Fedora 15下安装Oracle Java JDK以及对于alternatives的一些感受
- java深度探究--java监控程序思路--Listener,Timer监控--定时任务
- 自己 对于Java 的理解
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议