在jsp与servlet中处理中文乱码问题

1.向页面输出中文(分为字节流和字符流)response

字节流:代码中中文的编码和浏览器的编码需要一致
     解决乱码:
      * 设置浏览器默认打开时候的编码集
      * 获得字节数组的时候,传入一个编码集
     *** 将两个编码一致即可

// 设置浏览器默认打开的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 字节数组的时候设置编码,默认是gbk
response.getOutputStream().write("中文".getBytes("utf-8"));


字符流:
解决乱码:
* 设置浏览器的打开时的字符集
* 设置response缓冲区的编码(默认是ISO-8859-1编码,不支持中文)

// 设置浏览器打开的时候的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 设置response缓冲区的编码
response.setCharacterEncoding("utf-8");
response.getWriter().write("中文");


*** 字符流编码简写形式,这一句相当于上面两句 

response.setContentType("text/html;charset=utf-8");

 

注意事项:字节流和字符流是互斥的,只能用一种

 

 

2.处理参数带有中文(分为post和get)request

post:直接通过request接收数据 存到request的缓冲区,默认编码是ISO-8859-1(不支持中文)
  解决:* 设置request的缓冲区的编码

request.setCharacterEncoding("utf-8");

get: 数据需要通过地址栏 URL 编码
3种解决方式:

  * 1.使用URLEncoder编码,URLDecoder解码

username = URLEncoder.encode(username, "ISO-8859-1");
username = URLDecoder.decode(username, "utf-8");


  * 2.修改Tomcat的编码值(不建议,会影响其它项目)
修改server.xml 

<Connector port="80" protocol="HTTP/1.1" 
   connectionTimeout="20000" 
   redirectPort="8443" URIEncoding="utf-8"/>


* 必须有修改tomcat服务器配置文件权限



  * 3.String的构造方法(相当于方法1的简化,建议使用这种方式)

 username = new String(username.getBytes("ISO-8859-1"),"utf-8");

总结:

// 一、Response乱码
// 1.字节流
// 设置浏览器默认打开的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
// 字节数组的时候设置编码,默认是gbk
response.getOutputStream().write("中文".getBytes("utf-8"));

// 2.字符流
// 解决乱码:设置浏览器的打开时候的字符集和response缓冲区的编码
response.setContentType("text/html;charset=utf-8");



// 二、Request乱码
// 1.POST
// 设置request的缓冲区的编码
request.setCharacterEncoding("utf-8");

// 2.GET
// String的构造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值