首页 > 学院 > 开发设计 > 正文

编码问题总结

2019-11-08 02:35:35
字体:
来源:转载
供稿:网友
1.3 GET请求解读编码当客户端通过GET请求发送数据给服务器时,使用request.getParameter()获取的数据是被服务器误认为ISO-8859-1编码的,也就是说客户端发送过来的数据无论是UTF-8还是GBK,服务器都认为是ISO-8859-1,这就说明我们需要在使用request.getParameter()获取数据后,再转发成正确的编码。例如客户端以UTF-8发送的数据,使用如下转码方式:String name = request.getParameter(“name”);name = new String(name.getBytes(“iso-8859-1”), “utf-8”);1.4 POST请求解读编码  当客户端通过POST请求发送数据给服务器时,可以在使用request.getParameter()获取请求参数之前先通过request.setCharacterEncoding()来指定编码,然后再使用reuqest.getParameter()方法来获取请求参数,那么就是用指定的编码来读取了。也就是说,如果是POST请求,服务器可以指定编码!但如果没有指定编码,那么默认还是使用ISO-8859-1来解读。request.setCharacterEncoding(“utf-8”);String name = request.getParameter(“name”);1.5响应编码response.setContentType(“text/html;charset=utf-8”);response.getWriter().PRint(“传智”);在静态页面中,使用<meta>来设置content-type响应头,例如:<meta http-equiv="content-type" content="text/html; charset=UTF-8">1.6 URL编码通过页面传输数据给服务器时,如果包含了一些特殊字符是无法发送的。这时就需要先把要发送的数据转换成URL编码格式,再发送给服务器。其实需要我们自己动手给数据转换成URL编码的只有GET超链接,因为表单发送数据会默认使用URL编码,也就是说,不用我们自己来编码。使用javascript来完成 <script type="text/Javascript"> function _go() { location = "/day05_2/AServlet?name=" + encodeURIComponent("传智+播客"); } </script><a href="javascript:_go();">链接</a>1.7 Cookie中保存中文cookie的name和value都不能使用中文,如果希望在Cookie中使用中文,那么需要先对中文进行URL编码,然后把编码后的字符串放到Cookie中向客户端响应中添加Cookie String name = URLEncoder.encode("姓名", "UTF-8"); String value = URLEncoder.encode("张三", "UTF-8");[使用URL编码] Cookie c = new Cookie(name, value);[编码后的字符串保存到Cookie中] c.setMaxAge(3600); response.addCookie(c);从客户端请求中获取Cookie response.setContentType("text/html;charset=utf-8"); Cookie[] cs = request.getCookies(); if(cs != null) { for(Cookie c : cs) { String name = URLDecoder.decode(c.getName(), "UTF-8"); String value = URLDecoder.decode(c.getValue(), "UTF-8");[把Cookie的name和value使用URL解码后再打印。] String s = name + ": " + value + "<br/>"; response.getWriter().print(s); } }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表