编码方式,编码之问题

    编码方式对于程序的重要不言而喻,若是不能彻底理解编码方式,则在许多的地方都会困扰着你。

    对于编码方式的困扰,在刚学习jsp时出现的乱码问题到现在一年有余,一直在模糊状态,如今,也不知道是不是真的彻底明白,只是有一点小小的收获,期待以后的彻底理解,在此先记录一下点点滴滴。

   从开始的乱码起。

   首先是jsp中的乱码,首先说明jsp中设置编码方式的地方,在page标签中的pageEncoding是对于jsp编译为servlet后采取的编码方式,在contentType设置时是在web服务器响应到浏览器时告知浏览器响应头,采取的编码方式,以便浏览器能正确解读html文件,在response中的setCharacterEncoding也是web服务器告知浏览器,文件所采取的编码方式,这其中有个优先顺序,reponse>contentType,而在html中也有meta标签来用来响应浏览器器中的编码方式,在jsp中的设置,是优先于html中的meta编码方式的设置。

   设置的问题解决了,然后就是明白其中的原理,首先B/S结构中的信息传递是用二进制来传递的,因为我们传递的是字符串,这便要把字符串来转换为响应的二进制,我们知道,在不同的编码方式,对应得二进制信息是不同的,编码方式多种多样,ISO-8859-1,UNICODE,UTF-8,gbk,在中文的方式中可用unicode,utf-8,gbk但一般的用gbk,因为gbk是专门的为中文字符创建的,不是说其他的不好,而是unicode是专注于全世界的平台开发的,而utf-8是利用可变长度的字节来表示字符串,虽然utf-8表示中文字符很好,但是gbk毕竟是中文官方的吗,其实用utf-8更好,若是中文字符中包含有英文字符,也推荐使用。

   一般的程序对于编辑的内容都有采用相应的编码方式,比如在myeclipse中对于jsp的编辑默认是采用iso-8859-1来编辑的,而记事本默认是采用ANSI编辑的(当然也可通过另存为来设置编码方式),浏览器器也是程序编写的,因此它也有响应的编码方式的。编码方式解决后便是解码问题,因为不同的编码方式问题,同一二进制信息便有了好多种不同的对应于编码字符集的表现形式,所以要知道之前的编码方式,才能通过正确的解码方式来解码显示正确的字符,这里只是讨论利用jsp网页开发,所以只是用此表示编码方式,其他大同小异,首先要表明流程,在浏览器与服务器交互的过程中首先是通过发送地址,即URL,而不同的浏览器采用的是不同的URL encode的,中文的浏览器一般采用gbk,而若是修改了浏览器的编码方式也是可以的,在内部利用的是http协议,这个协议要求传递的信息分四部分,一请求行,二请求头标,三换行便是结束头标信息,四是请求的参数信息,请求行包括的是相应的提交方式,然后是提交的地址,然后是协议的版本,而请求头标是包括浏览器的信息,此种有浏览器所能识别的MIME类型,浏览器的版本等等,最后便是请求的参数信息,若是采用的get请求方式的,提交的信息是在URL的后边通过键值对来表示,若是POST则采用的是在最后一部分的请求的参数信息地方。到达服务器端是,web服务器便采取对应的编码方式来解码信息,以tomcat为例,若是在URL ,get此种提交方式的时候是以默认的iso-8859-1来进行编码的,若是含有非iso-8859-1的字符便会出现乱码,解决办法有,在tomcat中的server.xml文件中connector写入URIEncoding="编码字符集"使用useBodyRequestForURI=true,其中的区别是第一个是对应于所有的web服务器下的get url请求的信息都采用设置的编码方式来编码,而后者是在每次请求的信息内部进行重新编码(解码),只是一个页面,而不是像第一种方式的对应于所有的页面都进行编码,在此还要利用new String(request.getParameter("").getBytes("iso-8859-1"),"编码方式");重编写。若是采用post方式提交的话,便只在第一次读取参数信息的时候设置一下编码方式即可(request.setCharacterEncoding(''));若是厌恶了每次的请求都要写上request.setCharac....时可以通过过滤器来设置便可

猜你喜欢

转载自blog.csdn.net/soliy/article/details/5325464