编码

来源:互联网 发布:jmeter数据库查询结果 编辑:程序博客网 时间:2024/06/05 21:15

常见字符串:

  • ISO-8859-1(不支持中文)
  • GB2312
  • GBK
  • GB18030(系统默认,中国国标码)
  • UTF-8(万国码,支持全世界的编码,常用)

1.响应编码

Created with Raphaël 2.1.0服务器服务器服务器服务器客户端客户端A. 服务器默认ISO编码 response.getWrite().print("大家好");1.数据(使用ISO把中文转换成字节)1. ISO不支持中文 2. 浏览器将数据当做GBK编码B. 服务器用rsponse.setCharacterEncoding("utf-8")设置响应编码,即response.getWriter()这个字符流发送出去的字符都是用utf-82.数据(utf-8)一般浏览器把数据当GBK,故,还是乱码C. 服务器用setHeader() 设置名为Content-Type的响应头浏览器通过这个头得知服务器编码response.setHeader("Content-Type","text/html;charset=utf-8");该方法设置响应头也设置setCharacterEncoding()数据(utf-8),Content-type=utf-8通过Content-type头获知服务器编码utf-8这里使用utf-8即可

注:response设置Content-Type头还有一个便捷方法response.setContenType("text/html:charset=utf-8")

在使用getWriter()之前先调用response.setContentType(“text/html;charset=utf-8”);

  • 当使用response.getWriter()向客户端发送字符数据默认ISO编码,不支持中文
  • 当使用response.getWriter()前可使用response.setCharaceterEncoding()设置字符流编码为gbk或utf-8
  • 当使用response.getWriter()前用response.setHeader(“Content-type”,”text/html;charset=utf-8”)设置响应头通知浏览器服务器使用编码类型
  • response.setHeader(“Content-type”,”text/html;charset=utf-8”)快捷方法为setContentType(text/html;charset=utf-8”)

2.请求编码

Created with Raphaël 2.1.0客户端客户端ServletServlet客户端编码根据传参1.在地址栏中直接给出参数(GBK)2.在页面中点击表单或链接(UTF-8)页面为UTF-8传参也为UTF-81.请求index.jsp3.响应index.jsp, 其中包含Content-type=utf-84.点击链接或表单,数据为utf-81.utf-8A:POST请求,只需在请求获取参数之前调用request的setContentEncoding(utf-8)然后在使用getParameter()获取参数2.tomcat默认使用iso处理请求参数B:GET需在tomcat的/conf/server.xml中配置(但不让用!!!!)正确用法:String name=request.getParameter("name") ;反编回来!byte[] bytes=name.getBytes("ISO-8859-1");name=new String(bytes,"utf-8")
  • 客户端发送给服务器的请求参数是什么编码?

    • graph    TD客户端首先打开一个页面-->页面中提交表单或点击超链接

      ​ 在这个页面服务器响应什么编码,客户端发送的请求就是什么编码

  • 服务服务器默认使用什么编码解码参数?

    • 服务器默认使用ISO-8859-1 ISO不支持中文
  • 请求编码2种处理

    • GET请求参数不在请求体中,编码处理:

      1. String username=new String(request.getParameter("iso-8859-1"),"utf-8");
      2. 在servlet.xml中配置URIEncoding=utf-8

    • POST请求参数在请求体中,编码处理

      1. String username=new String(request.getParameter("iso-8859-1"),"utf-8");
      2. 在获取参数之前调用request.setCharacterEncoding(“utf-8”);

3.URL编码

Created with Raphaël 2.1.0客户端客户端服务器服务器1.GET请求中的中文没有URL编码,可能会出现丢失字节()2.使用的是表单,表单自动使用url编码服务器会自动识别URL编码,然后自动做URL解码

表单类型:Content-Type:application/x-www-form-urlencoded,就是把中文转换成%后面跟随两位的16进制
为什么用它: 在客户端和服务器之间传递中文时需要把它转换成网络合适的方式

  • 它不是字符编码
  • 它是用来在客户端与服务器之间传递参数的一种方式
  • URL编码需要先制定一种字符编码,把字符串解码后,得到byte[] ,然后把小于0的字节+256,再转换成16进制. 前面再加一个%
  • POST请求默认就是用URL编码! tomcat自动使用URL解码
  • URL编码: String username=URLEcoding.encode(username,”utf8”);
  • URL解码: String username=URLEcoding.decode(username,”utf8”);
    最后需要把链接中的中文参数,使用url编码!
原创粉丝点击