web项目中页面传参到后台,后台传参到页面的编码问题
来源:互联网 发布:51vv切换音频端口超时 编辑:程序博客网 时间:2024/06/01 09:35
我们总希望网络像本地一样的使用,输入什么就得到什么,但凡事总是事与愿违的多。在网络的世界里,我们要学的第一课就是编码。统一字符编码,是我们的理想,但首先要知道编码不统一的原因。十分遗憾的是,编码问题大部分是由于所使用的传输媒介和解析技术引起的,这正与我们理念中的与平台无关与浏览器技术无关的初衷相违背,我们甚至需要知道传输的一些细节才能得知编码的由来。
1.从页面传递到后台的参数
页面传参主要是指get方式的提交,post方式将会按照content="text/html; charset=GBK"指定的gbk来解析,也就是说不会产生乱码。
而get方式时参数会使用默认编码来提交,默认编码为iso-8859-1,也就是说后台需要以iso-8859-1格式来解析:
new String(request.getParameter("a").getByte("iso-8859-1"),"gbk");
解决方案为:
页面段get的参数进行加密:encodeURI(encodeURI(a.value));
后台接收时参数进行解密:UrlEncode.decode(request.getParameter("a"),"utf-8");
浏览器的传输使用的是utf-8编码
2.从后台传递参数到页面
后台传递参数到页面,准确的说是ajax到页面,因为如果是response.forward()会产生整个页面重画,它会按照content="text/html; charset=GBK"指定的gbk来解析,也就是不会出现乱码的情况。
而ajax只能采用默认编码来解析。默认编码为utf-8
解决方案为:
我们直接在后台的response中指定content="text/html; charset=UTF-8",这样ajax所返回的xml中的中文就可以正确的读取出来
结论:
content="text/html; charset=gbk"所指定的编码是文档的编码,因为html本身就是文档,这样可以确保文档中的文字不会乱码,也就是以文字输出不会产生乱码文字。
而iso-8859-1是浏览器对于get方式的url解析为参数时所使用的编码,庆幸的是基本上所有的浏览器都是使用这个编码。实际上浏览器的内部操作都是使用这个编码来运行的,包括运行js。它统一出这个编码是因为iso-8859-1是基本编码,所有的操作系统都支持,这是浏览器与平台无关的设计(本地语言环境字符编码有可能不能解析文档中指定的编码的部分文字)。因为我们不想与浏览器的编码机制有联系,所以我们会采用加密解密的方式去解决编码问题。
至于ajax的utf-8编码,我想不需要再做太多解释了。第一,ajax的技术采用的就是utf-8编码;第二,ajax返回的是一个xmlDOM模型,response中指定content="text/html; charset=UTF-8"则是表示文档的文字为utf-8的编码
另外浏览器的传输编码为utf-8
- web项目中页面传参到后台,后台传参到页面的编码问题
- django web项目的后台页面小扩展
- web页面中后台enter键登录
- web页面中后台enter键登录
- C# web 后台页面间的跳转
- 编码的问题--编码有三种(页面编码,文件格式的编码,后台处理所使用的编码)
- 后台类中跳转页面的解决方案
- 分布式架构项目中各模块中页面发送ajax请求后台json数据的传输问题
- jsp页面中url传参到后台出现乱码解决方案
- 如何在web页面中,实现耗时操作的后台执行?多线程吗?
- web关闭页面触发执行后台方法
- 页面中文传到后台再传到页面编码
- 解决后台修改数据后在IE8中刷新网页还是之前的页面的问题
- 后台提交页面的超难问题.求高手解决
- 后台提交页面的超难问题.求高手解决
- 页面传入后台的参数 乱码问题处理
- 前台页面传到后台的中文数据出现乱码问题
- 页面跳转传参后台乱码的问题
- 内核源代码阅读工具介绍
- WebSphere classpath相关问题
- bbextra 1.05 beta 3最新进展
- Java中Array与ArrayList的主要区别
- windows下设置本地域名
- web项目中页面传参到后台,后台传参到页面的编码问题
- 工资算法
- GraphViz是个好东东
- Java文件操作大全(六)
- 打造自己的中文分词器之如何让Lucene认识自己的分词器
- 将深度值压缩进颜色通道的方法
- php连接mysql
- 大型网站架构不得不考虑的10个问题
- WIFI网卡 sdccf10g