【编解码】web整站中涉及的编码原理浅析

本文深入探讨了Web环境中涉及的编码问题,包括客户端的浏览器地址、表单提交、超链接、JavaScript以及服务器端的Tomcat连接器、请求处理等。文章通过ISO-8859-1编码为例,解释了字符符号、编码方式和码表的概念,并分析了乱码产生的原因。Web环境的编码逻辑主要由服务器端控制,服务器响应的content-type奠定了整站的编码基调。
摘要由CSDN通过智能技术生成

一、问题范围

1.1 客户端

1. 浏览器地址

2. 表单提交

3. 超链接

4. js

5. ajax

6. cookie或请求头

7. js文件编码

1.2 服务端

1. tomcat连接器

2. request.getInputStream

3. request.getReader

4. request.getParamter

5. request.getHeader或response.setHeader

6. response.getOutputStream

7. response.getWriter

8. cookie

9. 重定向

1.3 原理简述

    以ISO-8859-1编码为例。ISO-8859-1编码,表示一个集合——{一个有限的字符符号集,一种编码方式,一个有限的编码集合},其中字符符号和编码对应关系的集合组成码表。

    字符符号:就是人能够看懂的字符,例如“A”、“你”、“我”、“+”等等,对计算机而言他是不知道字符是什么意思,他只知道这些是码点组成的;

    编码方式:单字节编码(UTF-8则以1~3字节编码,GBK以2字节编码),也就是文件中一堆二进制怎么断句的问题;

    有限编码:二进制断句成一小段一小段,每一个小段就表示一个编码(例如ASCII的码表是128个,ISO-8859-1的码表是256个,UTF-8或GBK也各有各的码表),每一个编码一一对应一个字符符号,码表就是编码和字符符号对应关系的集合;

    码表:即字符符号和编码的对应关系的集合,字符符号和编码一一对应;

    原理简述:当在windows上对文本文件进行输入的时候,输入一个字符符号,会到GBK码表中进行查找,找到对应的编码,然后写入文件;当在windows上打开一个文本文件的时候,这个文件实际上是一堆二进制,因为windows默认编码是GBK,因此这对二进制会被两个字节两个字节的断开,每断开两个字节得到一个编码,然后到码表中进行查找,然后取出对应的字符符号进行展示;

    乱码简述:当一个文件是GBK编码,意味着每两个字节就是一个编码对应一个字符,如果此时用ISO-8859-1的编码方式进行打开,意味着会对这堆二进制进行一个字节一个字节的编码,然后到ISO-8859-1的码表中进行字符符号的查找,因为ISO-8859-1只有256个编码和字符符号,当解析到的字节不在其正常编码范围,则用一个特殊的编码(对应的字符符号是问号“?”)进行展示,即便全部都在其正常的编码范围之内,因为GBK和ISO-8859-1的编码方式和码表并不对应,因此源文件的字符符号也不能进行正常的展示。

1.4 web环境逻辑

    web环境下编码的主动权在服务器端。为什么这么说?捋捋逻辑,如果要访问一个网站,首先就是在地址栏输入域名进行访问,服务器端响应回来的第一个content-type中包含的编码信息便奠定了整站的编码基调。后续的访问除非直接在地址栏输入非ascii字符的uri+query string,否则uri默认都是utf-8编码,query string或content(请求体)都会按照响应头中content-type的编码来进行(当然有好几个部分可以进行编码控制,例如html的<meta>标签等,但是响应头content-type中编码的优先级最高)。


二、问题讨论

2.1 客户端

1. 浏览器地址栏

    关于url编码,rfc 1738规定只有字母、数字和部分符号可以无需编码直接使用,而其他的字符则必须进行编码,对于进行何种编码ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值