昨天给同学改一个错,在SSM项目中,表单输入的String类型中,中文字符值,总是乱码,在控制器层获取的数据就开始乱码,先后进行了如下排查:
- web.xml中配置设置字符编码的监听器(过滤器),
- jsp页面的编码格式,用记事本打开查看,
- 对jsp页面中设置编码格式
排查完之后,都没有问题,还是乱码,然后今天早上来问老师.老师给了解决方法.
在控制器层得到字符串数据后,对字符串进行加工,将字符串转化为字节数组,然后以指定的编码方式在编码为字符串.
1 package com.qst.util;
2
3 /**
4 * @Description : 字符串转换编码格式为utf-8
5 * @Author: Liruilong
6 * @Date: 2019/9/29 10:38
7 */
8 public class Util_UTF8 {
9
10 // String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
11 //getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
12
13 public static String toUTF8(String str) {
14 try {
15 // 如果编码格式为GB2313,则转换为UTF-8
16 if (str.equals(new String(str.getBytes("GB2312"), "GB2312"))) {
17 str = new String(str.getBytes("GB2312"), "utf-8");
18 return str;
19 }
20 } catch (Exception exception) {
21 }
22 try {
23 // 如果编码格式为"西欧字符集"转化为utf-8
24 if (str.equals(new String(str.getBytes("ISO-8859-1"), "ISO-8859-1"))) {
25 str = new String(str.getBytes("ISO-8859-1"), "utf-8");
26 return str;
27 }
28 } catch (Exception exception1) {
29 }
30 try {
31 // 如果编码格式为GBK,转换为utf-8.
32 if (str.equals(new String(str.getBytes("GBK"), "GBK"))) {
33 str = new String(str.getBytes("GBK"), "utf-8");
34 return str;
35 }
36 } catch (Exception exception3) {
37 }
38 return str;
39 }
40 }
知识兔加油生活 ^_^ 2019.9.29