1.post或者get传参中多字节参数编码
如果某个http页面发送一个请求到服务器,如果其传递的参数中有中文或者多字节,浏览器本身根据该页面的编码方式声明如(<meta http-equiv="content-type" content="text/html;charset=gb2312">),不管是post还是get,将多字节文字进行编码,再进行传递到服务器。
而flash中的urlrequest则要代替一个页面的作用来将中文或者多字节文字按照某种编码方式进行编码,如下所示,对于一个字串 "text=我爱" ,根据codepage的不同,被转换为了不同编码。
同理,如果是一个html网页中,如果有一个form,form里有一个名字叫text的input,输入中文然后传递text参数时,会根据charset的不同(utf-8,gbk)来编码。usecodepage=false//UTF-8
text=%E4%B8%AD%E6%96%87
usecodepage=true//GBK
text=%D6%D0%CE%C4
2.Unicode
帮助文档对usercodepage的解释是“当该属性设置为 false 时,Flash Player 使用 Unicode 解释外部文本文件。 (保存这些文件时,必须使用 Unicode 对其进行编码。) 当该属性设置为 true 时,Flash Player 使用运行播放器的操作系统的传统代码页来解释外部文本文件。 ”
所谓codepage是各国的文字编码和Unicode之间的映射表。
而Unicode为"Universal Multiple-Octet Coded Character Set",简称UCS。现在常用的是UCS-2,就是将世界上所有的文字用2个字节统一进行编码。
3.jsp中的pageencoding和contenttype以及html中的charset
pageEncoding设置JSP源文件和响应正文中的字符集编码.
contentType设置JSP源文件的字符集编码和响应正文的MIME类型.
可见,pageEncoding和contentType都可以设置JSP源文件和响应正文中的字符集编码.但也有区别:
设置JSP源文件字符集时,优先级为 pageEncoding > contentType.都没有设置,默认ISO-8859-1.
设置响应输出的字符集时,优先级为 contentType > pageEncoding.都没有设置,默认ISO-8859-1;都设置了,以contentType为准.
a. contentType: <%@ page contentType="text/html; charset=UTF-8"%>
b. pageEncoding:<%@ page pageEncoding="UTF-8"%>
c. html页面charset:<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
sshong4.7日注关于上述解析并不完全正确,可以参考日志测验jsp的几个字符相关设置
4.服务器端解析多字节参数
jsp默认用request.setCharacterEncoding(),或者SetContentType来改变参数的编码方式(ms只对post传递的参数有效),如果采用默认的iso8859-1编码,这样获取的多字节参数会乱码,所以首先要更改获取编码方式,这样就能获取正确的多字节参数。
另外一种方法就是,将传递过来的参数首先转换为字节然后根据新编码形成新的字串,如 new String(request.getParameter(paramname).getBytes("iso8859-1"), "GBK");
5.proxy.jsp流程
如下如所示,
首先根据用户输入的url以及传入的其他参数(可能多字节),得到一个url,以及一串参数(形式如paramA=A¶mB=B...),最后将这些参数,传递到该url,获取输出到用户。其核心是这一串参数的转入以及转出,如何保证不乱码读入以及不乱码输出。