javaWeb阶段乱码总结

7 篇文章 0 订阅
7 篇文章 0 订阅

首先我来简单描述一下他的问题:

他是在一个添加页面,输入了一组数据,点击“提交”插入到了数据库表中,再点击“查看全部”,发现刚才插入的数据出现了乱码问题,再用cmd窗口打开数据表,同样也是乱码。以下是截图:
添加数据页面

查看数据页面出现乱码

对于这个问题,我们可以从六个方面来考虑!
JDBC 连接 MySQL数据库时出现的乱码问题,从六个方面来考虑:

一、在编写页面时就出现了乱码
  二、在浏览器解析时出现了乱码
  三、由 JSP编译器 在编译成 Servlet 时出现了乱码
  四、由数据库中的字段编码格式引起的乱码
  五、JDBC 连接 MySQL数据库 时,没有拼接 useUnicode=true&characterEncoding=utf-8 的参数
  六、MySQL中的编码设置的问题

(一般情况是由第四个方面和第五个方面引起的)

下面我们重点讲解一下这六个方面出现乱码的原因,以及如何去解决,还有以后在写项目中如何养成良好的习惯防止类似问题再次发生。

一、在编写页面时就出现了乱码

这个问题的可能性极小,举个简单的例子,就是原来编写文件的编码格式是 UTF-8,编写好后又改成了 GBK 编码格式,也没注意文件中的中文变成了乱码,就直接去浏览器中浏览了。
1、出现的原因

可能我们在编写完文件后,对文件的编码格式又进行了改变,导致在文件中就出现了乱码,那自然在用浏览器浏览时也会出现乱码。
2、解决办法

将原来的编码格式改回去。如果非要改变编码格式,就将出现乱码的地方重新输入中文。

建议:我们尽量在编写文件前就对文件编码格式设置好,编写完文件尽量不要改变文件编码格式,如果非要改变,就再检查一下中文的地方是否出现了乱码。

二、在浏览器解析时出现了乱码

首先来给大家简单解释一下ContentType 这个属性,这个属性主要是让浏览器以什么样的形式、什么编码格式来读取这个文件,也就是设置浏览器的解析方式。

我们常见的设置方式:ContentType=”text/html; charset=UTF-8”(浏览器将以html的形式,编码格式为UTF-8来解析这个html文件)
1、出现的原因
  1)ContentType属性 可能没有设置 或 设置有误;
  2)可能手动更改过浏览器解析的编码格式,
2、解决办法

检查是否正确设置了 ContentType 的值中编码格式。这里以 JSP页面举例,在第一行加以下代码:

<%@ page language=“java” contentType=“text/html; charset=utf-8” pageEncoding=“utf-8” %>

如果是手动更改过浏览器解析的编码,请重新打开浏览器即可。

建议:在编写页面时,一定要记住设置 ContentType属性,最好不要手动更改浏览器的默认解析编码。

三、由 JSP编译器 在编译成 Servlet 时出现了乱码

这个方面是由 JSP页面 引起的,如果不是 JSP页面 引起的乱码,这方面因素可不用考虑。pageEncoding 这个属性主要是用来设置 JSP编译器在将JSP文件编译成Servlet时使用的编码格式。  
1、出现的原因

JSP页面 中可能没有设置 pageEncoding 这个属性。
2、解决办法

检查出现乱码的 JSP页面 是否设置pageEncoding 这个属性。如果没有设置,请在第一行加以下代码:

<%@ page language=“java” contentType=“text/html; charset=utf-8” pageEncoding=“utf-8” %>

建议:在编写 JSP页面 时,一定要在第一行写以上代码。

四、由数据库中的字段编码格式引起的乱码

在 MySQL中,数据库、数据表、表字段都有自己的编码格式。
  
  点击这里可以学习如何查看和修改数据库、数据表、表字段的编码格式。
1、出现的原因

可能在建表的时候没有指定表或字段的编码格式,或者指定的编码格式和我们想要的编码格式不一致。
2、解决办法

通过以下SQL语句查询引起乱码的字段的编码格式:

SHOW FULL COLUMNS FROM <表名>;

如果查询出来的结果和我们想要的编码格式相同,则可以考虑其他方面的因素,若不一致,那就请再通过以下SQL语句修改出现乱码对应的字段的编码格式:

ALTER TABLE <表名> MODIFY COLUMN <字段名> <字段类型> CHARACTER SET <编码格式>;

建议:在建立表的时候我们最好设置一下默认的编码格式

五、JDBC连接 MySQL数据库 时,没有拼接

useUnicode=true&characterEncoding=utf-8 的参数

useUnicode=true 与 characterEncoding=utf-8 的意思是:使用Unicode编码,字符编码为UTF-8。因为UTF-8属于Unicode编码,所以要将 useUnicode 的属性值设为 true,两个参数最好全部加上。
1、出现的原因

可能在 JDBC中 连接数据库时的URL后面忘记拼接 useUnicode=true&characterEncoding=utf-8 的参数。
2、解决办法

找到 JDBC连接数据库 的URL,如果没有拼接 useUnicode=true&characterEncoding=utf-8 的参数,就在后面加上。
  注意:在xml配置文件中配置数据库URL时,要使用 & 的转义字符,也就是 &(很多人死在了这个上面)

六、MySQL中的编码设置的问题

以上方面都考虑过了,如果在cmd窗口中依然还出现问号的现象,那就应该是MySQL中的编码设置的问题了。
  
  点击这里查看关于 MySQL 的编码如何进行设置。

七*、JDBC 连接 MySQL良好的编码设置习惯

我们在写代码中,要养成良好的编码设置习惯,将所有的编码全部设置成UTF-8,因为UTF-8是国际化的编码,又称为万国码(关于UTF-8编码,感兴趣的朋友可以上网查询资料,这里不作过多讲解),很多语言都支持UTF-8的编码,一般情况下不会产生错误的结果。
  1、将文件的编码格式改成 UTF-8编码格式,再开始编写代码;
  2、在页面中所有设置编码的地方全部设置成 UTF-8编码格式;
  3、在JDBC连接 MySQL的URL后一定要记住拼接useUnicode=true&characterEncoding=utf-8 这两个参数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值