一、乱码是如何产生的?
- 本质上都是由于字符串原本的编码格式与读取时解析用的编码格式,不一致所导致的。
二、有时间,乱码需要两次编码、两次解码
- 两次编码两次解码的过程为:
- UTF-8 编码 -> UTF-8(iso-8859-1) 编码 -> iso-8859-1 解码-> UTF-8 解码。
- 编码和解码的过程是**对称的**,所以,不会出现乱码。
三、常见的解决方式
- 1、浏览器默认编码为 ISO-8859-1。
- 后端 Servlet 接收请求参数,按照 ISO-8859-1 进行解码,得到二进制流,然后再用 UTF-8 编码。
String queryString = request.getQueryString();
byte[] bytes = queryString.getBytes("ISO-8859-1");
String param = new String(bytes,"UTF-8");
// 修改服务器(tomcat)配置:在 server.xml 中,默认为 ISO-8859-1(没有显示出来),
// 我们可以添加上 UTF-8。
<Connector URIEncoding="UTF-8"/>
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");