Tomcat 项目报错和中文乱码

错误1 :

java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' Query: select * from librarian where username = ? and password = ? Parameters: [张飞, 123]

报错原因:

Mysql 建库,建表,字段的编码方式不对

修改方法:

如果建库未修改编码方式,则需要修改库 -> 表 -> 表中字段的编码方式

ALTER DATABASE coursework CHARACTER SET utf8;

ALTER TABLE students CHARACTER SET utf8;

ALTER TABLE students CHANGE sex sex VARCHAR(2) CHARACTER SET utf8;

ALTER TABLE librarian CHARACTER SET utf8;

ALTER TABLE librarian CHANGE username username VARCHAR(20) CHARACTER SET utf8;

ALTER TABLE librarian CHANGE PASSWORD PASSWORD VARCHAR(20) CHARACTER SET utf8;

错误2 :中文乱码问题

2.1 tomcat服务器启动打印日志乱码:

控制台(gbk)和tomcat(utf-8)编码方式不一样

解决方法:

修改conf目录下的logging.properties 文件

2.2 表单提交参数中文乱码问题

浏览器默认对中文进行编码的方式为UTF-8,服务器端接收到参数以后若解码方式不一致则会产生乱码

  • get方式提交中文不会产生乱码 -> get提交参数拼接在url后 -> tomcat 8版本以后内部对于URL编辑码采用的是UTF-8

  • post方式提交中文会乱码 -> post提交参数是在请求体中 -> 服务器默认解码方式为 ISO-8859-1

解决方式:

指定解码方式:

void setCharacterEncoding(String env)

放在servlet首行,或在全局Filter中配置

2.3 响应中文乱码问题

printwriter.write("中文");

服务器端对中文默认编码方式 ISO-8859-1, 而浏览器默认的解码方式为GBK(windows 10系统)

解决方法:

方法一:更改服务器端编码方式使其和浏览器端解码方式保持一致

  • 设置服务器编码方式和浏览器端一致,GBK
  • 写在servlet首行
resp.setCharacterEncoding("GBK")

方法二:使用方法直接将服务器和浏览器端编解码方式设置为一致

resp.setContextType("text/html;charset=utf-8")

2.4 tomcat服务器启动访问项目中的html静态资源中文出现乱码问题

修改配置文件 - server.xml

web.xml

posted @ 2020-11-21 11:12  Pengc931482  阅读(426)  评论(1)    收藏  举报