• Web 编程中编码问题


    1. 常见字符编码

    • iso-8859-1(不支持中文)
    • gbk(国标码)
    • utf-8 (万国码, 支持全世界的编码)

    2. 响应编码

    1. 当使用 response.getWriter() 来向客户端发送字符数据时, 如果在之前没有设置编码,那么默认使用
      iso-8859-1 进行编码, 而该编码方式不支持中文, 因此客户端一定显示乱码.
    2. 在使用 response.getWriter() 之前可以使用 response.setCharacterEncoding() 来设置字符
      流的编码为 "utf-8", 而这只是设置了服务器的编码方式,浏览器的解码仍然使用系统默认的方式.
    3. 在使用 response.getWriter() 之前可以使用 response.setHeader("Content-Type","text/html;charset=utf-8")
      来设置响应头,通知浏览器, 服务端使用的是 utf-8 方式编码. 这个方法不只是设置响应头, 而且也会设置服务端编码方式为 utf-8,
      也就是设置了 setCharacterEncoding(), 即一句顶两句.
    4. response 设置 Content-Type 还有一种便捷方法: response.setContentType("text/html;charset=utf-8");

    3. 请求编码

    1. 客户端发送给服务器的请求参数是使用什么方式编码呢?
      客户端首先打开一个页面, 然后在页面中提交表单或点击超链接!
      在请求这个页面时, 服务器响应的编码是什么, 那么客户端发送请求时的编码就是什么!

    2. 服务端默认使用什么方式来解码参数?
      服务器默认使用 iso-8859-1 来解码!! 因为 iso-8859-1 不支持中文, 所以一定会出现乱码!
      另外, tomcat 8.0 默认使用 utf-8 进行解码, GET 请求不再需要转换, POST 请求仍需要.

    3. 请求编码有两种方式: GET 和 POST

      • GET 请求参数不再请求体中;
      • POST 请求参数在请求体中;
    4. GET 请求编码处理方式:

      • 取到乱码数据, String name = request.getParameter(name);
      • 用 iso-8859-1 反编码: byte[] bytes = name.getBytes("ISO-8859-1");
      • 用 utf-8 重新解码: name = new String(bytes, "utf-8");
    5. POST 请求编码处理方式:

      • 只需要在获取参数之前调用 request 对象的 setCharacterEncoding("utf-8");, 然后再使用
        getParameter() 来获取参数即可.

    4. URL 编码

    1. 表单(form) 的类型: Content-Type: application/x-www-form-unlencoded, 就是把中文转换成"%",后面在
      跟随两位的十六进制, 例如: "张三" 的 url 编码结果: %E5%BC%A0%E4%B8%89.
    2. 为什么要用它: 在客户端和服务器之间传递中文时, 需要把它转换成网络合适的方式, 防止发生丢字节码的情况.
    3. URL 编码特性总结:
      • URL 编码不是字符编码!
      • 它是用来在客户端和服务器之间传递参数的一种方式.
      • URL 编码需要先指定一种字符编码, 把字符串编码后, 得到 byte[], 然后把小于0 的字节 +256, 再转换成十
        六进制,前面在添加一个 "%" .
      • POST 请求默认使用 URL 编码, tomcat 会自动使用 URL 解码.
      • URL 编码: String username = URLEncoder.encode(username, "utf-8");
      • URL 解码: String username = URLDecoder.decode(username, "utf-8");
      • 链接中的中文参数, 需要使用 URL 进行编码.




        参考资料:
  • 相关阅读:
    流的概念(转自本站progor)
    Centos7安装OpenLDAP
    python发送post请求
    小计安装部署滴滴开源kafkamanager工具
    VSCode集成Cmder控制台输入中文乱码
    在win10的pycharm使用wsl中的python进行开发
    《Python数据科学手册》学习笔记及书评
    VSCode小说插件ReadNovel根据内容查找页码
    《TensorFlow实战Google深度学习框架(第二版)》学习笔记及书评
    Cmder启动WSL中的Ubuntu出现复制粘贴异常
  • 原文地址:https://www.cnblogs.com/linkworld/p/7588401.html
Copyright © 2020-2023  润新知