2019-8-29IDEA控制台乱码解决及mysql5.1.47官方数据库驱动包jar的bug问题

0829

1)乱码问题

无论是数据库,游览器,数据库,以及后台开发都有遇见过乱码问题,那么如何解决乱码问题. 遇到乱码莫慌,只要保持编码与解码一致就行.如果还是乱码可以利用最笨的方法也就是将字符转化为字节,然后选择你想要设置的编码格式.什么码也好反正都是对字节的处理.说起来很简单,其实就是这么简单

下面以一例说明

我们都知道response.setContentType(“text/html;charset=utf-8”);等价于

1.response.setCharacterEncoding(“UTF-8”);

2.response.addHeader(“Content-Type”,“text/html;charset=utf-8”);

但是这是为什么有没有思考一下,第一句话还等于

str.getBytes(“utf-8”);str是你想要输出的语句,也就是说把你想要输出的语句编成以utf-8的字节数组形式.那么游览器怎么来解析呢,在把你设置的编码格式utf-8告诉给游览器,在设置游览器的解码形式就行.在这个过程中编码也好解码也好始终都是不变的.

总的来说就是,当我拿到一串字符我可以把它变成字节(如果你想要变成带有编码格式的字节数组,那么切记解码的时候也应该以该编码格式解码),然后输出的时候,看该平台是什么方式解码,就设置器对应的编码格式.

esponse.setCharacterEncoding(“UTF-8”)等价于str.getBytes(“utf-8”)

 //response.setCharacterEncoding("UTF-8");  // 设置数据存入数组缓冲区中时的编码方式
        response.addHeader("Content-Type", "text/html;charset=utf-8"); // 设置浏览器查看时的编码方式
        //response.setContentType("text/html;charset=utf-8");
		OutputStream os = response.getOutputStream();
		String str = "中公教育";
		os.write(str.getBytes("utf-8"));

		/*response.setContentType("text/html;charset=utf-8");
		OutputStream os = response.getOutputStream();
		String str = "中公教育";
		os.write(str.getBytes());*/

2)最新版IDEA乱码问题

1)修改idea的bin目录下的配置文件idea64.exe.vmoptions

[外链图片转存失败(img-wwBLnt70-1567084729013)(C:\Users\15566\AppData\Roaming\Typora\typora-user-images\1567080929723.png)]

在最后面追加-Dfile.encoding=GBK

2)如果tomcat信息出现乱码

可以在tomcat的config目录下找到logging.properties文件

[外链图片转存失败(img-AMiIE1zI-1567084729016)(C:\Users\15566\AppData\Roaming\Typora\typora-user-images\1567081150839.png)]

修改为GBK,默认为UTF-8

[外链图片转存失败(img-7lFoMEze-1567084729020)(C:\Users\15566\AppData\Roaming\Typora\typora-user-images\1567081204150.png)]

3)mysql5.1.47官方版本bug

我使用的是queryRunner工具 类做数据查询 ,数据库使用的 mysql 5.7,驱动包使用 mysql 5.1.47 版本的 connector jar 包,在用queryRunner类update 执行插入语句(含有数据库字段 date 类型的更新),遇到 插入数据库记录的时间字段时,报空指针。后来发现是版本问题官方给出了bug.

解决很简单:不用这个版本就行拉.

异常如下

java.lang.NullPointerException
	com.mysql.jdbc.PreparedStatement.setTimestamp(PreparedStatement.java:4241)
	com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3601)
	com.mysql.jdbc.JDBC42PreparedStatement.setObject(JDBC42PreparedStatement.java:68)
	com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setObject(NewProxyPreparedStatement.java:365)
	org.apache.commons.dbutils.AbstractQueryRunner.fillStatement(AbstractQueryRunner.java:374)
	org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:527)
	org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:497)
	dao.impl.StudentDaoImpl.add(StudentDaoImpl.java:21)
	service.impl.StudentServiceImpl.add(StudentServiceImpl.java:17)
	servlet.StudentServlet.add(StudentServlet.java:53)
	servlet.StudentServlet.doGet(StudentServlet.java:32)
	servlet.StudentServlet.doPost(StudentServlet.java:24)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

参考链接:https://blog.csdn.net/u012688704/article/details/95082905

你可能感兴趣的:(javaweb)