java web 传智书城项目中文乱码问题的解决

  • 引入JS文件造成的乱码问题

  • Filter造成的乱码问题

  • 信息输出到数据库造成的乱码问题

    起初遇到这些乱码问题的时候,还以为是一个方面的问题导致的乱码。但是在解决一个乱码,又碰到另一个乱码的时候,真的是感觉干啥啥不行,乱码第一名。


    引入JS文件乱码

  • 第一次遇见是在注册页面,源代码里在是一个 innerHTML中,源文件中发现之后,首先改了一下innerHTML 的值,发现英文可以正常显示。F12检查一下,结果发现引入的JS文件中所有的中文都是乱码。 打开Eclipse查看我们的JS源文件,中文显示正常,但是在 检查 中发现引入的文件中文都是乱码,查看编码方式,文件中是UTF-8,页面的编码方式也是UTF-8,那么问题出现在哪里了呢? 问了老师,问了百度,最终在历经千辛万苦之后,找到了正确方法!

  • 首先建立一个txt文件,将JS文件代码全部复制,之后在txt文本文件中把JS文件中的代码粘贴过来,把编码方式设置为 带BOM的UTF-8。然后重命名并覆盖源文件,重启tomcat服务器,就可以发现提示的文字已经从乱码变成中文了!


Filter造成的乱码问题

首先贡献出地址栏:


java web 传智书城项目中文乱码问题的解决

  • 在使用request.getParameter(“category”)时,对照我们地址栏的信息可以发现我们的category=学术,同时我们为了显示方便,要把页面做成下面的效果:

java web 传智书城项目中文乱码问题的解决

但是,如果我们用了Filter处理了GET和POST请求的乱码,那么我们这个时候就会发现一些问题,原本需要的页面效果没有出来,出来的却是这样的效果:

java web 传智书城项目中文乱码问题的解决

看到这??,我脑门上就是??,怎么就出现这种情况了呢?由于这个我们在做这个项目之前为了防止中文乱码写了一个EncodingFilter,当然,遇到这么多中文乱码问题的时候我也怀疑过这个Filter的实用性,但是没有进行更改。后来在老师和同学的帮助下,想起来我用的服务器是tomcat 8.5,已经不是8.0以前的版本了,GET方法(我的Servlet都写在GET方法里了 )的编码方式已经默认是UTF-8了,而我的EncodingFilter中又对GET方法进行处理,把GET方法的编码默认为 ISO-8859-1 ,强行转码,所以造成了request获取乱码,在EncodingFilter中把这些东西注释掉就可以了。

values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");


数据库的乱码

  • 在测试新增后台公告和添加修改商品信息的时候发现的这个问题,当然那个时候request的乱码问题还没有解决,我就把他们当做是一种乱码问题了,但是当我解决了前一个乱码问题,发现这个乱码问题还是没有解决的时候,心态瞬间有些炸裂。打开我的数据库,查看一下我添加的数据,发现数据库添加的信息就直接是乱码了。
  • java web 传智书城项目中文乱码问题的解决
  • 这里你会发现,在公告内容里其实是有中文的,但是为什么我们调用Servlet添加的信息就会出现乱码呢,在Navicat中我直接添加数据,是可以直接添加中文的,如果你不能添加中文的话就看看再你的数据库中字符集是什么样的。

java web 传智书城项目中文乱码问题的解决

  • 综合起来这些因素,想到是不是在连接数据库的时候,我们的配置文件里少了点什么东西呢,打开我们的配置文件, 找到这一行,在name中把我们使用的数据库设置编码格式,添加成为这样的形式就能解决数据库连接的乱码问题了!
  • java web 传智书城项目中文乱码问题的解决