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 进行编码.

      参考资料:

Web 编程中编码问题的更多相关文章

  1. Web 编程中路径问题

    web.xml 中 <url-pattern> 路径(即 Servlet 路径) 要么以 "*" 开头, 要么以 "/" 开头. 转发和包含路径(服 ...

  2. 不要忽视Web编程中的小细节

    概述:长时间以来,我们创造了某些在构造和范围内用以提升网站易用性的约定和实践.然后在我们进行web编程的时候总有一些疏忽和纰漏.这里总结了一些web编程时容易出现的小错误,并给出了相应的补救方法,希望 ...

  3. WEB编程中获取src目录下的文件(没有src目录)

    这种情况遇见的会比较多,像一个WEB工程,如果在src下面写了一个xml或者一些其它的文件,当工程发布到服务器时,web程序是在tomcat等服务器下运行这个程序的,这个时候,程序目录里面并没有src ...

  4. Go Web 编程之 模板(一)

    概述 模板引擎是 Web 编程中必不可少的一个组件.模板能分离逻辑和数据,使得逻辑简洁清晰,并且模板可复用.引用第二篇文章<程序结构>一文中的图示,我们可以看到模板引擎在 Web 程序结构 ...

  5. go web编程——实现一个简单分页器

    在go web编程中,当需要展示的列表数据太多时,不可避免需要分页展示,可以使用Go实现一个简单分页器,提供各个数据列表展示使用.具体需求:1. 可展示“首页”和“尾页”.2. 可展示“上一页”和“下 ...

  6. go web编程——自定义路由设计

    本文主要讲解go语言web编程中自定义路由器的设计.在此之前需要先了解一下go语言web编程中路由与http服务的基本原理,可以参考笔者另一篇博文:go web编程——路由与http服务 . 我们已经 ...

  7. go web编程——路由与http服务

    本文主要讲解go语言web编程中的路由与http服务基本原理. 首先,使用go语言启动一个最简单的http服务: package main import ( "log" " ...

  8. WEB开发中的字符集和编码

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  9. web.xml 中以编码方式添加filter并设置初始化参数AbstractAnnotationConfigDispatchServletInitializer

    web.xml中配置filter <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...

随机推荐

  1. Atitit.导出excel功能的设计 与解决方案

    Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...

  2. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结

    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 ...

  3. Java Web框架play framework的下载与环境变量配置

    Web项目的开发有着众多的框架,近期刚刚接触了play. 对于一个Java开发者来说,play是一个不可多得的好框架.以下我简介下怎样下载play .以及play的环境变量配置方法. (1)登录pla ...

  4. C# 冒泡排序

    class Program { static void swap( ref int atemp, ref int btemp)//注意ref的使用 { int temp = atemp; atemp ...

  5. std::thread “terminate called without an active exception”

    最近在使用std::thread的时候,遇到这样一个问题: std::thread t(func); 如果不使用调用t.join()就会遇到 "terminate called whitho ...

  6. JS高程3:错误处理和调试

    浏览器打开控制台的快捷键 Ctrl+shift+I try-catch语句 语法 try{ // 可能会导致错误的代码 } catch(error){ // 在错误发生时怎么处理 } 可以自定义错误信 ...

  7. Jquery学习笔记(8)--京东导航菜单(2)增加弹框

    京东导航,添加中间的弹框栏,使用position定位,放在左侧栏的li标签里面,成为一个整体,保证鼠标在弹框里的时候,弹框不消失: <!DOCTYPE html> <html lan ...

  8. linux学习笔记26--命令wc

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的行数.字数.字节数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的行数.字 ...

  9. (译)Getting Started——1.3.1 Incorporating the Data(合并数据)

    在实现完应用的行为后,需要创建数据模型来支撑应用的界面.应用的数据模型定义了应用中数据的维护方法.数据模型可以是一个基本的dictionary类型,也可以是复杂的数据库,范围很广.好的数据模型可以更为 ...

  10. java打印和重写toString

    class Person { private String name; public Person(String name) { this.name=name; } } public classPri ...