Web 编程中编码问题
1. 常见字符编码
- iso-8859-1(不支持中文)
- gbk(国标码)
- utf-8 (万国码, 支持全世界的编码)
2. 响应编码
- 当使用
response.getWriter()来向客户端发送字符数据时, 如果在之前没有设置编码,那么默认使用
iso-8859-1 进行编码, 而该编码方式不支持中文, 因此客户端一定显示乱码. - 在使用
response.getWriter()之前可以使用response.setCharacterEncoding()来设置字符
流的编码为 "utf-8", 而这只是设置了服务器的编码方式,浏览器的解码仍然使用系统默认的方式. - 在使用
response.getWriter()之前可以使用response.setHeader("Content-Type","text/html;charset=utf-8")
来设置响应头,通知浏览器, 服务端使用的是 utf-8 方式编码. 这个方法不只是设置响应头, 而且也会设置服务端编码方式为 utf-8,
也就是设置了setCharacterEncoding(), 即一句顶两句. - response 设置
Content-Type还有一种便捷方法:response.setContentType("text/html;charset=utf-8");
3. 请求编码
- 客户端发送给服务器的请求参数是使用什么方式编码呢?
客户端首先打开一个页面, 然后在页面中提交表单或点击超链接!
在请求这个页面时, 服务器响应的编码是什么, 那么客户端发送请求时的编码就是什么! - 服务端默认使用什么方式来解码参数?
服务器默认使用 iso-8859-1 来解码!! 因为 iso-8859-1 不支持中文, 所以一定会出现乱码!
另外, tomcat 8.0 默认使用 utf-8 进行解码, GET 请求不再需要转换, POST 请求仍需要. - 请求编码有两种方式: GET 和 POST
- GET 请求参数不再请求体中;
- POST 请求参数在请求体中;
- GET 请求编码处理方式:
- 取到乱码数据,
String name = request.getParameter(name); - 用 iso-8859-1 反编码:
byte[] bytes = name.getBytes("ISO-8859-1"); - 用 utf-8 重新解码:
name = new String(bytes, "utf-8");
- 取到乱码数据,
- POST 请求编码处理方式:
- 只需要在获取参数之前调用 request 对象的
setCharacterEncoding("utf-8");, 然后再使用
getParameter()来获取参数即可.
- 只需要在获取参数之前调用 request 对象的
4. URL 编码
- 表单(form) 的类型:
Content-Type: application/x-www-form-unlencoded, 就是把中文转换成"%",后面在
跟随两位的十六进制, 例如: "张三" 的 url 编码结果:%E5%BC%A0%E4%B8%89. - 为什么要用它: 在客户端和服务器之间传递中文时, 需要把它转换成网络合适的方式, 防止发生丢字节码的情况.
- 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 编程中编码问题的更多相关文章
- Web 编程中路径问题
web.xml 中 <url-pattern> 路径(即 Servlet 路径) 要么以 "*" 开头, 要么以 "/" 开头. 转发和包含路径(服 ...
- 不要忽视Web编程中的小细节
概述:长时间以来,我们创造了某些在构造和范围内用以提升网站易用性的约定和实践.然后在我们进行web编程的时候总有一些疏忽和纰漏.这里总结了一些web编程时容易出现的小错误,并给出了相应的补救方法,希望 ...
- WEB编程中获取src目录下的文件(没有src目录)
这种情况遇见的会比较多,像一个WEB工程,如果在src下面写了一个xml或者一些其它的文件,当工程发布到服务器时,web程序是在tomcat等服务器下运行这个程序的,这个时候,程序目录里面并没有src ...
- Go Web 编程之 模板(一)
概述 模板引擎是 Web 编程中必不可少的一个组件.模板能分离逻辑和数据,使得逻辑简洁清晰,并且模板可复用.引用第二篇文章<程序结构>一文中的图示,我们可以看到模板引擎在 Web 程序结构 ...
- go web编程——实现一个简单分页器
在go web编程中,当需要展示的列表数据太多时,不可避免需要分页展示,可以使用Go实现一个简单分页器,提供各个数据列表展示使用.具体需求:1. 可展示“首页”和“尾页”.2. 可展示“上一页”和“下 ...
- go web编程——自定义路由设计
本文主要讲解go语言web编程中自定义路由器的设计.在此之前需要先了解一下go语言web编程中路由与http服务的基本原理,可以参考笔者另一篇博文:go web编程——路由与http服务 . 我们已经 ...
- go web编程——路由与http服务
本文主要讲解go语言web编程中的路由与http服务基本原理. 首先,使用go语言启动一个最简单的http服务: package main import ( "log" " ...
- WEB开发中的字符集和编码
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- web.xml 中以编码方式添加filter并设置初始化参数AbstractAnnotationConfigDispatchServletInitializer
web.xml中配置filter <?xml version="1.0" encoding="UTF-8"?> <web-app versio ...
随机推荐
- Vivado的helloword程序:硬件工程部分
硬件平台:ZedBoard软件平台:vivado2013.3 本示例通过综合.实现,生成比特流,发送到SDK实现.启动vivado并且创建一个项目根据提示操作一步步创建新项目的时候记得选择RTL Pr ...
- android studio - 使android studio 在提示时不区分大小写
- nyoj 460 项链 (区间dp)
项链 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子, ...
- 分时段显示不同的提示的网页JS特效代码
脚本说明: 把如下代码加入body区域中 <SCRIPT> today=new Date(); var day; var date; var hello; var wel; hour=ne ...
- linux学习笔记5--命令rmdir和rm
昨天学习了创建目录的命令mkdir ,接下来学习一下linux中删除文件和目录的命令: rm命令. rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根 ...
- 解决linux下/etc/rc.local开机器不执行的原因
前不久因项目需要写了开机启动其他程序的shell脚本,因工作忙,调试完给了技术支持人员,也没去注意过. 到后来,有几台服务器突然被重启了,这时候领导问,怎么开机启动的脚本没起作用,还被批了一顿,哎,做 ...
- 排查PHP-FPM占用CPU过高
发现 如何发现的呢?当然是使用top命令,发现系统的load average>3,这说明系统已经处于比较高的负载中. 尝试解决 当我把php-fpm重启后,没过一会儿又开始cpu狂飙!这是什么鬼 ...
- HDFS的HA机制
传统的HDFS机制如下图所示: 也就是存在一个NameNode,一个SecondaryNameNode,然后若干个DataNode.这样的机制虽然元数据的可靠性得到了保证(靠edits,fsimage ...
- 【iOS与EV3混合机器人编程系列之四】iOS_WiFi_EV3_Library 剖析之中的一个:WiFi UDP和TCP
在上一篇文章中.我们通过编写EV3 Port Viewer项目实现了iOS监測EV3的实时端口数据. 程序最核心的部分就是我们的开源码库iOS_WiFi_EV3_Library. 那么,在本文中,我们 ...
- (转)Python爬虫学习笔记(2):Python正则表达式指南
以下内容转自CNBLOG:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并 ...