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. Android--&gt;Realm(数据库ORM)使用体验,lambda表达式

    Realm,为移动设备而生.替代 SQLite 和 Core Data. 非常庆幸,官方帮助文档有中文: https://realm.io/cn/docs/java/latest/ 尽管眼下最新的版本 ...

  2. 匿名内部类 , Iterable<T> 和 Iterator<T>

    package generic; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; i ...

  3. CentOS6.2下Qt5.1.0无法输入中文

    因为在程序中需要在界面上输入中文,但是系统是英文系统,没有预装中文输入法,于是从网上搜了一下输入法的安装,但是输入法安装好之后,可以再系统中输入中文,但是却无法再Qt中输入中文,只能继续找解决办法 安 ...

  4. (译)Getting Started——1.1.1 Start Developing IOS Today(开始IOS开发)

    安装       本课程对于创建运行在iPad.iPhone和iPod触摸屏上的应用来说,是一个完美的起点.该向导的四个板块可以作为构建你第一个应用的简单向导——内容包括了你需要使用的工具,主要的理念 ...

  5. What is Web Application Architecture? How It Works, Trends, Best Practices and More

    At Stackify, we understand the amount of effort that goes into creating great applications. That’s w ...

  6. uboot中断功能实现

    uboot中实现irq中断(uboot version2015.04)1.实验目的:实现GPIO_2的外部中断 2.实验步骤:a.GPIO_2(GPIO1_IO02)为中断源, 首先需要设置这个pad ...

  7. tree 命令使用技巧

    一.简介 tree命令可以以目录树的形式显示指定(默认显示这个文件系统)目录的所有文件夹和文件 二.使用 显示一个目录 $ tree folder Tips:如果文件夹有中文,则会显示一串转移字符,使 ...

  8. 从TensorFlow0.12升级到TensorFlow1.13

    sudo pip install --upgrade tensorflow-gpu $ sudo pip install --upgrade tensorflow-gpu[sudo] password ...

  9. [转]VMPlayer的Briged网络配置

    VMware.VMware Player.VirtualBox.Windows Virtual PC等虚拟机软件都提供了桥接(bridged).网络地址转换(network address trans ...

  10. hdu 3681(bfs+二分+状压dp判断)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 思路:机器人从出发点出发要求走过所有的Y,因为点很少,所以就能想到经典的TSP问题.首先bfs预 ...