我们经常在项目开发中会遇到乱码问题,我这里有几个问题,大家共同来探讨下。
我对引起乱码的起因是这样理解的:Web项目中各个部分都有自己的编码格式,具体为:1.web页面;2.客户端传输数据给服务端时也有自己的编码(我印象中这个是固定的,http传输好像都是“ISO-8859-1”编码);3.开发所用IDE(如Eclipse)的字符编码;4.数据库编码。不知道这样理解有没问题,我这里先姑且这么认为。
既然分为4个部分,且各个部分的编码又不尽相同,那么产生冲突肯定是再正常不过的事情。比如web页面的编码为GBK,当我们将此页面提交时,根据http协议将客户端(web页面)的数据发送到服务端,发送过程中字符是以ISO-8859-1的编码方式存在的,这也就是说在传输的过程中如果能把这些数据打印出来,那也是乱码,但这跟我们的关系不是太大,因为我们看字符最终是否为乱码是在IDE中输出或者是将数据存入数据库后在数据库中观察的。假如IDE为Eclipse,字符编码为gb2312,当我们使用System.out.println((String)request.getAttribute(...)),此时可能就会出现乱码问题,因为这里字符显示是gb2312样式的,和字符原来的编码方式有冲突。假如数据库的编码方式也是GBK,那么我们是可以忽略这个冲突,将这些数据写入数据库,因为数据库的字符编码和web页面中字符的编码一致,所以虽然在IDE中是乱码的字符最终在数据库中不是。
理解的比较片面,还望了解真相的大虾能给个完整准确的答案,我在这里算是抛砖引玉了。