关于java web中的解码与编码
来源:互联网 发布:java怎么做界面设计 编辑:程序博客网 时间:2024/05/20 05:58
一.html表单,用get和post提交信息到servlet
1.<meta content="text/html; charset=ISO-8859-1>这个html标签里面的属性的是告诉浏览器的编码。个人觉得可以这样理解,你编写一个html文件,然后你在body里面输入了中文。这里的charset的值就是表明html制作使用的语言。那么当浏览器要显示这个html页面的时候,就知道这个页面是用什么字符显示了!就不会出现乱码了!还有一个作用就是页面编码!
比如这里设置为 charset=ISO-8859-1,那么在编辑这个页面的时候就不能输入中文了。如果这里设置了Big-5,编辑这个页面的时候就不能使用简体中文了!
2.这里面请求的过程主要可以归纳为以下:客户端网页发送一个请求,浏览器将自动根据这个页面所使用的字符集来对汉字进行编码之后(这里就要用到上面说的,meta的页面编码了),传输到服务器。然后服务器通过字符集来解码。然后服务器端再把所需要返回的信息通过字符集编码,再传到客户端的浏览器,浏览器进行解码!这里涉及到了2次解码与编码。
3.get方法请求页面
get方法请求信息的时候是把form表单的信息直接放到Url地址里面的,具体的体现就是在request信息中体现在Query String Parameters中。
①传输的中文信息,通过页面编码格式进行URL编码(也就是meta里面的charset的编码格式)传输到服务端
URL编码规则:
URL编码遵循下列规则: 每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。
②
String xx = request.getParameter("xx");
服务端通过字符集来进行解码,而tomcat用的默认字符集是ISO-8859-1,所以如果这样子对所传过来的十六进制码进行解码的肯定是不对的(因为解码和编码必须对应可以参考http://wenku.baidu.com/view/14a91366caaedd3383c4d331.html)。如果现在直接在控制台输出xx的话得到的将会是乱码。那么该怎么才能获得我们需要的数据呢?
可以这样子
String xx = new String(request.getParameter("text").getBytes("iso-8859-1"),"aa") (aa为html的页面编码格式)。这样在控制台打出就不会出现乱码了!(注意这里用request.setCharacterEncoding这个函数是不起作用的。)
每次这么弄也麻烦,那么就可以通过改变tomcat的这个默认的字符集编码。可以通过修改server.xml文件中的下面的语句,加上URIEncoding=“xx“(这里的xx为常用的html的页面编码格式)的配置即可:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="GB18030"/>。
③.服务器把需要传输的信息通过编码传到客户端(浏览器),浏览器通过解码来获取信息!
这里又涉及到一个编码和解码,而在服务器端则默认使用iso-8859-1进行编码成byte,等到了浏览器,发现response的信息header中没有相关编码设置,就会去取window系统的编码格式,中文系统默认为GBK/GB2312。所以,打印出来的页面的浏览器编码格式为GB2312。而如果设置了response的编码格式,那么就算到了浏览器,浏览器解析也会按照设置的字符集解码。这里设置的方法可以有setContentType()和setCharacterEncoding()。response.setCharacterEncoding设置HTTP 响应的编码,如果之前使用response.setContentType设置了编码格式,则使用response.setCharacterEncoding指定的编码格式覆盖之前的设置。
4.post方法请求页面
POST把提交的数据则放置在是HTTP包的包体中具体体现就是request信息中体现在Form Data中。
转载至:http://www.cnblogs.com/iMouse-wu/p/3168659.html
个人总结:请求到服务响应过程中二次解码、二次编码过程。
Post方式:通过页面设置的编码所POST体中所携带的参数编码。服务器解码。响应的时候默认采用ISO-8859-1
Get方式:URL编码,url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。
再服务器解码.
- 关于java web中的解码与编码
- 关于java web中的解码与编码
- java中的编码与解码
- java 中的编码与解码
- Java中的编码与解码
- 关于web请求中的编码解码问题
- 关于Java字符串编码与解码
- #java web#编码解码
- Java中的字符编码与解码(转)
- Java中的字符编码与解码
- java中的url 编码与解码
- java中的url 编码与解码
- java中的url 编码与解码
- java中的url 编码与解码
- java中的url 编码与解码
- java中的url 编码与解码
- java中的编码与解码问题
- java中的url 编码与解码
- ACrush楼天成回忆录
- 条件变量、pthread_cond_init
- 编程之美读书笔记---计算字符串的相似度
- Host USB与USB Device
- HTML5 SVG
- 关于java web中的解码与编码
- IOS之同步请求、异步请求、GET请求、POST请求
- 20 个简化开发任务的 JavaScript 库
- c语言复习课程1(唐老师答疑课)
- Linux下 利用find命令删除所有.svn目录
- 系统集成项目管理之信息系统服务管理
- poj 1265 Area
- Nginx模块编写初探
- 黑马程序员----网络编程一