java.net.URLEncoder、java.net.URLDecoder配套使用

java.net.URLEncoder、java.net.URLDecoder配套使用
2011年09月01日
   主要因浏览器到服务器之间的一次编码导致中文在网络传输过程中产生错误。BS通讯的标准为ISO8859-1。直接传送中文肯定是不行。
  为了避免这种错误,在BS转换之前之后我们先对内容进行包装(转换)。
  例如:
  [code="java"]URLEncoder.encode(caseName, "utf-8")
  [code="java"]URLDecoder.decode(new String(caseName.getBytes("iso8859-1"),&q uot;utf-8"),"UTF-8");
  在系统中一般都会使用filter进行转换,应尽可能减少编码解码,主要是GBK和utf-8在互转过程中存在如下问题:
  如果中文字符串长度是奇数(已全部恢复),转换后可能后变成(已全部恢?)。
  这里解决办法是,编码时直接变成对方需要的字符集。
  例如:URLEncoder.encode(caseName,"GBK")
  这样在对方就不用解码了。
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.cn.servlet04; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; @WebServlet("/Cookie03") public class ServleCookie03 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置响应消息体的数据格式 resp.setContentType("text/html;char=utf-8"); //获取cookie Cookie[] cookies = req.getCookies(); //遍历数据 if(cookies != null && cookies.length>0){ for(Cookie c:cookies){ String name = c.getName(); //判断name是否是登录时间的name System.out.println("name"+name); if("time".equals(name)){ String value = c.getValue(); //解码 value = URLDecoder.decode(value,"utf-8"); //有我要的cookie 不是第一次访问 resp.getWriter().write("<h1>欢迎回来</h1>"); } } } if(cookies == null || cookies.length==0){ //第一次访问 Date date = new Date();//获取系统时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String str_date = sdf.format(date); Cookie c = new Cookie("time",str_date); // c.setMaxAge(0); resp.addCookie(c); resp.getWriter().write("欢迎你首次访问"); } } } 为什么网页无法正常显示,给出修改过后的代码
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值