现在的位置: 首页 > 综合 > 正文

中文乱码问题的解决一

2013年11月12日 ⁄ 综合 ⁄ 共 2091字 ⁄ 字号 评论关闭

1.       http协议
a)       http协议是基于请求相应模式的协议,客户端发送一个请求,服务器端返回该请求的响应。http是建立在tcp/ip为基础的高层协议。http协议第一个版本是http0.9,后来发展到了http1.0,现在最新版本是http1.1被广泛使用。
b)     http请求
                i.         请求方法/URI/版本
              ii.         请求头
              iii.         请求正文(请求头和请求正文之间是一个空行(回车换行),这个非常重要,它表示请求头已经结束,接下来是请求正文。
c)     http响应
                i.         协议/状态码/描述
              ii.         响应头
              iii.         响应正文(响应头和响应正文之间也是用空行分开(回车换行))
2.       post提交方式消息结构

POST /drp1.4/test_encoding.jsp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:8080
Content-Length: 16
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=92B6F142987C5B900BD0742FFEC4BFEA

name=Hello+World

3.       get提交方式消息结构

GET /drp1.4/test_encoding.jsp?name=Hello+World+ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh,en-us;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=92B6F142987C5B900BD0742FFEC4BFEA


4.       html中的post提交主要是把表单信息放到了消息体中,而get提交则是把消息放到了消息头中,在tomcat5.X中postget字符集的处理方式不同,所以get提交时需要 TOMCAT_HOME/conf/server.xml,找到web使用的Connector,加入URIEncoding=”GB18030”属性,如:

<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GB18030"/>

5.
post提交主要是把表单信息放到了消息体中被http按照固定的格式封装起来了,在客户端中传递时,不会被客户端的底层解封转码,在传到服务器中,服务器如果设置了Filter,Filter会截取请求,按照固定的http协议解封,把体内的中文(含有中文意思的编码)转换为中文,然后服务器会拿到中文进行处理,

get提交则是把消息放到了消息头中,头中有中文的时候,在客户端向服务器端传输的过程中,就会被客户端的底层转换成其他编码,到服务器端就已经不是想要的中文了,故服务器端的Filter已经不能在把乱码转换成中文了,所以传到客户端就是乱码了,

抱歉!评论已关闭.