在java web开发过程中,时常会遇到这样或那样的中文乱码现象。以下是常见的几种乱码现象和解决方法:

 

1、  提交表单到服务端出现乱码


  原因1、页面和服务端的编码不一致,只需将页面和服务端编码设为一致即可,页面(jsp/html)在信息头加上支持中文的编码

  原因2、页面和服务端编码一致,此时就可能是由于采用的框架的编码与程序的编码不一致,将request和response的编码设置为UTF-8/GBK即可


2、  ajax传参乱码


js编码使用utf-8,而服务端获取则用gbk解码,则会出现乱码,解码的范围不能小于编码的范围。

而有时使用 new String (“参数”.getBytes(“GBK”),”UTF-8”),来还原字符,但是编码的界限,结果还是可能会有乱码。最好的方式就是将中文参数用encodeURIComponent编码两次,第一次是标准编码,第二次就是编码为ascii,所有的编码方式都是基于ascii而扩展的,所以以ascii传输就不会乱码。后台接收的时候decode一次就可以了,因为容器会解码一次。这也是web应用在windows下是正常的,在linux下确实乱码的,因为容器默认采用系统的编码解码一次,windows下一般为gbk/gb2312,对中文有良好的支持,而linux下为ascii,当然就会出现乱码。解决的办法第一种就是中文编码两次用ascii传输,还有一种就是修改容器的默认编码。(注意:千万不要相信一些Spring的URLEncodingFilter,这些没用的,因为取数据的时候是容器的编码先起作用,除非你自己实现HttpServletRequest)

 

3、  不会乱码的编码方式

    项目所有文件都使用unicode编码,则可以支持所有的语言,而不会乱码,unicode的3个实施标准, UTF-8 ,UTF-16, USC-2。其中UTF-8 因为其编码特性得到的广泛支持,UTF-8编码已经成功国际化标准编码。如果你正在搞一个新的项目请别犹豫,前台后台数据库一律UTF-8 编码。