基础12——乱码问题
Posted 鹏达君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础12——乱码问题相关的知识,希望对你有一定的参考价值。
1.根本原因:当java程序与其它存储媒介交互时因采用的字符编码方案不支持中文而导致乱码。很多存储媒介的存储方式都是基于字节流的,java应用程序与这些媒介交互时就会发生字符与字节之间的转换,具体情况如下:
①从jsp页面表单提交数据到java应用程序时需要进行从字节到字符的转换;
②从java程序到jsp页面显示时需要进行从字符到字节的转换;
③从数据库到java程序读取时需要从字节到字符的转换;
④从java程序到数据库存储时需要进行从字符到字节的转换;
⑤当一些文件被java程序读取时需要从字节到字符的转换;
⑥当java应用程序向一些文件存储数据时需要进行从字符到字节的转换;
如果在以上的转换过程中使用的编码方式与字节原有的编码不一致,中文信息就会出现乱码。
2.中文问题的解决方法
①jsp页面显示乱码的问题
原因:没有在jsp页面里指定使用的字符集编码,只要将jsp页面的page指令的contentType属性和pageEncodeing属性以及html META标签的charset属性指定使用"GBK""GB2312""GB2312"或者"UTF-8"任意一个字符集编码即可。
例子:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="<%=request.getContextPath() %>/scripts/jquery-1.7.2.js"></script> <script type="text/javascript"> $(function(){ $("a").click(function(){ window.history.go(-1); return false; }); }); </script> </head> <body> <div align="center"> <img style="width: 300px; height: 300" src="${pageContext.request.contextPath}${book.imagepath}"><br> 书名: ${book.name}<br> 作者: ${book.author}<br> 价格: ${book.price}<br> 销量: ${book.salesamount}<br> 库存: ${book.storenumber}<br> 分类: ${category.name}<br> <a href="#">返回</a> </div> </body> </html>
②表单提交中文时出现乱码问题
原因:jsp获取页面参数时一般采用系统默认的编码方式(即ISO8859-1),如果页面参数的编码类型和系统默认的编码类型不一致,特别是页面参数时中文时,很可能就出现乱码。
解决方法:
1)获取表单的数据的页面或servlet首先使用request对象的setCharacterEncoding()方法强制设定获取表单数据的编码方式。
//设定请求报文的字符编码为UTF-8 request.setCharacterEncoding("UTF-8"); //设定页面参数名称为“name” String name=request.getParameter("name");
注意:使用该方式时表单的method属性必定设定为post方式。
2)使用String类的构造方法对字符串进行重构,并制定重构的字符编码。
//假定页面参数名称为“name” String name=request.getParameter("name"); //重新构造字符串name,由原来的ISO-8859-1转换成UTF-8 name=new String(name.getBytes("ISO-8859-1”),"UTF-8");
3)如果在jsp页面中将含有中文的变量值输出到jsp页面时出现了乱码,设置一下代码:
//设定响应报文的MIME类型 response.setContentType("text/html;charset=UTF-8");
③数据库连接出现乱码问题
原因:程序向数据库中保存含有中文信息的记录时编程乱码;或者读取含有中文的记录时显示为乱码。
解决方法:在数据库连接字符串中加入编码字符集:
String url="jdbc:mysql://localhost:3306/database?user=root"+"&password=pwd&useUnicode="true&characterEncoding=UTF-8";
④数据库显示中文信息的乱码问题
解决方案:将数据库的编码方式设置为UTF-8.
3.核心方法
说明:当你遇到乱码问题的解决方案
1)先找出到底哪里开始乱码,也就是哪里出现乱码的地方
2)出现乱码的原因是什么
3)根据原因去解决
以上是关于基础12——乱码问题的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象
VSCode自定义代码片段12——JavaScript的Promise对象