web应用中浏览器与服务端的编码和解码

转载 2016年05月31日 11:07:53

http://blog.sina.com.cn/s/blog_87cb63e50102w2b6.html

*************************************************************

基本概念
 

  有信息交换就会产生编码、传输、解码三个过程。编码是信息从一种形式转变成另一种形式的过程,正如人类的语言通过声带编码,转换成声波。解码是编码的逆函数,耳膜接收声波,通过脑神经解码成人类文化所能理解的信息。
   字符集是一种文化上下文下的所有文字符号集合,它的作用是规定了某个文化下的所有字符,以及该字符在信息交换系统下的表示方式,在计算机信息系统下是字节或01序列。本文会在某些时刻将字符集和编码方案互用,以方便理解。
    对于javaweb应用,狭隘的编码解码的过程可以简单的理解为:编码的过程是文本字符串信息编码成01序列,解码是将01序列恢复为文本字符串信息,具体编码成什么样的01序列是由编码采用的字符集来决定的,也就是编码方案。
   乱码是对信息采用的编码方案无法理解,使用了错误的编码方案对信息进行解码造成的。如果要理解一段信息的真实意图,就得知道信息采用的编码方案,这是信息交换的密钥,这就是为什么战争年代破解对方电报加密方式,实际上就是在破译对方的编码方案。
http协议层的编码解码
   http协议层的字符集关系到http发送者和接送者采用什么字符集方案解析对方发送的内容。
浏览器端的编码
   请求端常规请求方式主要为form、url、ajax、http组件如HttpClientAPI。
   浏览器存在文档编码方案charset的概念,文档的编码方案等同于文档解码方案,它对文档中发生的请求编码会产生影响。
   影响form提交数据的编码的因素包括:form的accept-charset属性、html文档的编码方案即document.charset。其中,form的accept-charset是否能够有效,依赖具体浏览器的实现,有些浏览器并不支持,如IE。文档编码方案可以通过document.charset来修改。
   文档内的url编码,如iframe的src指定的url,以文档编码方案为准,地址栏的url的编码方案完全取决于具体的浏览器实现,通过HttpClient组件发送请求时,url是能任意指定编码方案的。
   ajax发送http请求的url编码方式完全取决于浏览器实现,一般支持以文档编码方案来决定,但是数据体统一采用utf-8,另外,虽然ajax可以指定header在contenttype说明编码方案,但这种做法不会对url、数据体的编码方案产生任何影响,甚至在有些浏览器中,最终contenttype中的编码描述都无法真正影响。
   另外,header的编码方案是iso-8859-1,这个是http规范。
服务端的解码
   服务端的httpserver需要解码的对象包括:header、url、数据体。
   header解码方案是iso-8859-1。
   url解码方案通常称为URIEncoding,一般HttpServer会提供相应设置,标准servlet并不提供该接口。jetty默认utf-8字符集来解码,但其他httpserver如tomcat会默认iso-8859-1。
   数据体解码在servlet中可以通过request.setCharacterEncoding来设置。一般的,有些httpserver会以characterEncoding>request请求头字符集>utf-8的优先顺序来决定数据体的解码方案。
服务端的编码
   服务端httpserver需要编码的对象是:header、数据体。
   header的编码方案同样是iso-8859-1。
   通常情况下,服务端必须要指定返回数据体的编码方案且要在header中标注编码方案,否则httpserver一般默认iso-8859-1对输出进行编码,而浏览器也无法得知返回数据体的编码方案,只能自行猜测,完全依赖浏览器自己的实现。
   response.setCharacterEncoding的职能是告诉httpserver数据体的编码方案,并不会也不应该影响到header中的编码方案的标注。response.setContentType会影响到header的编码方案的标注,浏览器根据该标识决定解码方案。对于一个健全的httpserver来说,在同时通过两个方法指定了数据体编码方案和header编码方案标注的情况下,数据体编码方案应该由后者决定,这样使浏览器端得到的编码信息和服务端真正编码信息一致。另外,一定要注意的是这两个指定编码方案的方法必须在response创建输出流之前调用,输出流一旦创建,编码方案无法后期指定。
浏览器端的解码
   浏览器端对返回进行解码的对象包括:header、数据体。
   header的解码方案是iso-8859-1。
   浏览器的数据体解码方案依赖返回信息,浏览器首先从返回头header中查找编码方案标注,如果没有标注,在得知返回内容为html内容的话,将从head的meta标签中读取,如果还没找到,浏览器就不知道如何解码,会消极的选择一种解码方案。
   在理论上,推荐html文档在meta中声明编码,且编码的声明一定要在文件开始的1024字节内完成,所以最好在head标签开始时立即声明。
   文档中通常都会有一些通过url下载的资源文件,如css和js文件,如果资源文件输出时没有在返回头中指定明确的编码方案,浏览器无法得知编码方案,只能以上面介绍到的文档编码方案来进行解码,这也是浏览器容错的最佳策略。

web请求编码与解码

编码字符集 UTF-16中英文2字节,java使用UTF-16,所以char占2字节,优点:编码效率高,适合在磁盘和内存中使用 UTF-8英文1字节中文3字节,在编码效率和编码安全性之间做了平衡,...
  • liudajiang
  • liudajiang
  • 2014年11月15日 00:36
  • 457

web应用中浏览器与服务端的编码和解码

http://blog.sina.com.cn/s/blog_87cb63e50102w2b6.html **********************************************...
  • zhao1949
  • zhao1949
  • 2016年05月31日 11:07
  • 775

web应用中浏览器与服务端的编码和解码

基本概念有信息交换就会产生编码、传输、解码三个过程。编码是信息从一种形式转变成另一种形式的过程,正如人类的语言通过声带编码,转换成声波。解码是编码的逆函数,耳膜接收声波,通过脑神经解码成人类文化所能理...
  • J080624
  • J080624
  • 2017年02月16日 21:02
  • 979

关于编程中编码和解码的问题

编码和解码的定义:        电脑只能处理0100110这样的二进制数字,字符是日常生活中我们使用的符号,为了使电脑能够存储、传输和展示字符,我们需要把字符转换为0100101这样的二进制码,这...
  • shashangdemeng
  • shashangdemeng
  • 2012年11月22日 11:58
  • 1154

Http协议中的编码和解码与浏览器渲染

一、字符集与文字编码简介    1. 计算机如何显示文字   我们知道,计算机是以二进制的“形式”来保存和处理数据的,也 就是说,不管我们使用键盘进行输入,还是让计算机去读取一个文本文件,计算机得到的...
  • J080624
  • J080624
  • 2017年02月19日 17:39
  • 849

Web请求响应编解码过程

原文链接:http://blog.csdn.net/hippowc/article/details/45337447 以下编解码都是针对内容包含中文的情况,否则也不需要编解码 :) 1、U...
  • qq_28163175
  • qq_28163175
  • 2018年01月31日 15:37
  • 12

浏览器url编码

转自:http://blog.csdn.net/ultrani/article/details/8176122/ 简述: 1:地址栏输入和点击url访问浏览器时,chrome下...
  • xianymo
  • xianymo
  • 2016年09月10日 10:56
  • 1905

字符的编码与解码

在浏览网页,编写程序时,偶尔会碰到一些乱码问题。例如在打开一个网页时,没有一个正常字符可辨识的,全是一些奇怪的符号,方块、问号等等。通过浏览器的tools->encoding选择UTF-8或者GBK,...
  • xuriwuyun
  • xuriwuyun
  • 2014年06月27日 19:08
  • 2262

编码和解码通俗解释

在内存中,本来没有字符的概念,每个字节都是一个0-255的数字。我们把数字进行编号,每个数字代表一个字符。 追根溯源,以ASCII码为例。比如65(十进制)定义为字符'A',66定义为'B',61定...
  • u013036792
  • u013036792
  • 2014年11月13日 14:14
  • 1538

JSP页面请求响应过程中的编码解码

该编简要讲述:JSP页面传输过程中,浏览器与服务器的编码解码以及HTTP协议对URL进行的编码解码。无意间在网络上看到这样一个问题,让我不得其解。查询了诸多资料,稍有眉目。问题如下:所有的JSP页面的...
  • J080624
  • J080624
  • 2017年02月19日 17:35
  • 1197
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:web应用中浏览器与服务端的编码和解码
举报原因:
原因补充:

(最多只允许输入30个字)