11、如何解决乱码问题

一、乱码是如何产生的?

  • 本质上都是由于字符串原本的编码格式与读取时解析用的编码格式不一致所导致的。

二、有时间,乱码需要两次编码、两次解码

  • 两次编码两次解码的过程为:
    • 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();
// 按照ISO-8859-1方式解码
byte[] bytes = queryString.getBytes("ISO-8859-1");
// 按照UTF-8编码
String param = new String(bytes,"UTF-8");
  • 2、只支持 get 方式请求。
// 修改服务器(tomcat)配置:在 server.xml 中,默认为 ISO-8859-1(没有显示出来),
// 我们可以添加上 UTF-8。
<Connector URIEncoding="UTF-8"/>
  • 3、只支持 post 方式请求。
// 在 servlet 直接设置请求参数编码--推荐
// 设置请求参数编码 
request.setCharacterEncoding("UTF-8");
  • 4、响应乱码
 // 设置MIME类型
response.setContentType("text/html");
// 设置编码
response.setCharacterEncoding("UTF-8");

//设置编码(简写)
response.setContentType("text/html;charset=utf-8"); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值