许多人在写web工程获取前端传来的中文数据,常常是一段乱码。这里跟大家解释一下。
假设你用的是jsp页面写前端。jsp的第一行就有声明
<%@page pageEncoding="UTF-8"%>
那么我们传递的中文数据会使用UTF-8
编码,而浏览器默认采用的是 ISO8859-1
给你解码,那么先用 UTF-8
编码,再用ISO8859-1
解码,你后端接收到的数据自然是一段乱码。
碰到乱码问题先不要着急,你要想一下问题出在哪里,好多新手以为看到了UTF-8
就觉得中文数据一定不会乱码了,那肯定是不对的。
当然我们也有解决方法
我们后端拿到的是数据 msg 的编码过程是
原数据 ⇒ UTF-8(编码) ⇒ ISO8859-1(解码) ⇒ 乱码
那么我们再按照相反的编码顺序就可以拿到原数据了
乱码 ⇒ ISO8859-1(解码) ⇒ UTF-8(编码) ⇒ 原数据
// 先将乱码通过 ISO8859-1 方式解码成 字节数组
byte[] by = msg.getBytes("ISO8859-1");
// 再将字节数组通过 UTF-8 方式编码成 原数据
// 现在的字符串msg就是原来的数据了
msg = new String(by, "UTF-8");
这里只是非常浅显的讲了一下乱码的问题,要想真正的了解数据的编码与解码规则,还要自己多去学习。