中文字符乱码的原因及解决办法

来源:互联网 发布:java web设置编码 编辑:程序博客网 时间:2024/06/02 15:46
中文字符乱码的原因及解决办法

java的内核是Unicode的,也就是说,在程序处理字符时是用Unicode来表示字符的,但是文件和流的保存方式是使用字节流的。在java的基本数据类型中,char是Unicode的,而byte是字节,因此,在不同的环节java要对字节流和char进行转换。这种转换发生时如果字符集的编码选择不当,就会出现乱码问题。

我们常见的乱码大致有如下几种情形:
1、汉字变成了问号"?"
2、有的汉字显示正确,有的则显示错误
3、显示乱码(有些是汉字但并不是你预期的)
4、读写数据库出现乱码

下面我们逐一对它们出现的原因做一些解释:

首先,我们讨论汉字变成问号的问题。

Java中byte与char相互转换的方法在sun.io包中。其中,byte到char的常用转换方法是:
public static ByteToCharConverter getConverter(String encoding);

为了便于大家理解,我们先来做一个小实验:比如,汉字"你"的GBK编码为0xc4e3,其Unicode编码是/u4f60。我们的实验是这样的,先有一个页面比如名为a_gbk.jsp输入汉字"你",提交给页面b_gbk.jsp。在b_gbk.jsp文件中以某种编码方式得到"你"的字节数组,再将该数组以某种编码方式转换成char,如果得到的char值是0x4f60则转换是正确的。

a_gbk.jsp的代码如下:

参考文献:

UTF-8 and Unicode FAQ

《JSP动态网站技术入门与提高》太阳工作室 孙晓龙 赵莉编著

参考文献:

UTF-8 and Unicode FAQ

《JSP动态网站技术入门与提高》太阳工作室 孙晓龙 赵莉编著

原创粉丝点击