关于乱码问题
* 数据传递过程中的乱码
解释:数据传递过程中的乱码是指: 将数据从浏览器发送给服务器的时候,服务器接收到的数据是乱码的。
- ISO-8859-1 是国际标准码,不支持中文编码,它兼容ASCII码,又称为latin1编码,不管是哪个国家的文字,在浏览器发送给服务器的时候,都会采用ISO-8859-1编码进行编译。
- 乱码原因:浏览器会先把将要发送给服务器的数据,转化成对应的ISO-8859-1编码,然后将编码后的数据发送给Web服务器,而服务器并不知道在转化之前数据采用的是哪个国家的语言。
- 解决方式 1:先将服务器中接收到的数据采用ISO-8859-1编码方式解码,解码成为二进制数据,然后给定一种支持简体中文的编码方式重新编码组装。
// 先解码 ISO-8859-1
byte[] bytes= 接收数据的变量名.getBytes("ISO-8859-1");
// 再编码 使用 GBK / utf8 / gb2312
new String(bytes,"GBK/utf8/gb2312"); // 此处保证和HTML和浏览器的编码方式一致
- 解决方案 2:(只支持POST请求,只对请求体编码,并且要设置在取数据之前)
- void setCharacterEncoding(String 编码名);
request.setCharacterEncoding("UTF-8");
- 解决方案 3: (只支持GET请求,只对请求行编码)
1. 修改 Catalina_HOME/conf/server.xml (Tomcat根目录)
2. 在 server.xml中找到 <Connector port="8080" protocol="HTTP/1.1"> 在该标签内添加属性 URIEncoding="UTF-8"/>,也就是: <Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"/>
3. <Connector > 标签中都可以写哪些属性? tomcat-9\webapps\docs\config\Http.html 该html中的属性都可以写。
* 数据展示过程中的乱码
解释:数据展示过程中的乱码是指:数据显示在浏览器页面的时候出现乱码
- 解决方法1: - 设置响应的字符类型,以及对应的编码方式
response.setContentType("text/html;charset=UTF-8");
- 解决方法2: - 设置HTML文件的编码方式和浏览器编码方式一致
<meta content="text/html" charset="UTF-8">
* 数据保存过程中的乱码
解释:数据保存过程中的乱码是指: 数据保存到数据库中表里的时候出现乱码
- 情况1: 在保存前就出现乱码,保存到数据库中就会乱码。找出为什么乱码,采取上面的方法解决乱码问题。
- 情况2: 保存前不是乱码, 但是因为数据库不支持简体中文,所以出现乱码。 设置数据库的编码方式。