作者 | 前嗅    来源 | 前嗅大数据(www.forenose.com)


为什么要编码?


大家可以先思考个问题:

计算机是如何表示我们人类能够理解的符号的,也就是我们人类使用的语言。


人类的语言有太多了,因而表示这些语言的符号太多。

我们无法用计算机中一个基本的存储单元—— byte 来表示。

因而必须要经过拆分或一些翻译工作,才能让计算机能理解。


我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。


这个翻译的过程就是编码。


所以可以想象只要不说英语的国家要能够使用计算机就必须要经过编码。




常见的编码有以下几种:


1. Unicode(Unicode Character Set)

Unicode包含除键盘以外的编码是Unicode,又称统一码、万国码、单一码、标准万国码。

Unicode在js、json里出现的比较多。


其格式为:\u+4位字符串\  

例如:\u4e2d\   \u4e2d\   

2. ASCII

美国信息交换标准代码,标准ASCII 码也叫基础ASCII码。


使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0—9、标点符号以及在美式英语中使用的特殊控制字符。


3. URL编码

URL编码原理是使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符。


可以避免Url中有些字符会引起歧义。


URI编码就是一个字符的ASCII码,它的ACSII码的十六进制式,在前面加上"%",就是它的URL编码。


例如:"/"的ASCII码是92,92的十六进制是5c, 所以"/"的URI编码就是 %5c

  "胡"的ASCII码是-17670, 它的十六进制是BAFA, 所以它的URI编码就是 "%BA%FA"


4. Native编码

每个国家都有自己的Native编码,中国的是GBK(Chinese Internal Code Specification)。


GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位。


GBK编码共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。


5. hex编码

Hex编码的原理就是将原来8位的二进制字节打断,分成两个4位的,并且在前面加上4个零,进行补位。


这样一个8位二进制字节就变成了2个8位的二进制字节,再将新得到的2个二进制字符,进行16位进制转换,得到的新的16位字符串就是Hex的值。


所以二进制的[72, 69, 88]与hex的484558是相等的。


例如:中国——E4B8ADE59BBD

6. BASE64编码

Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节。


也就是说,转换后的字符串理论上将要比原来的长1/3。




作者简介

前嗅,企业级大数据供应商,多年来致力于大数据技术研究与开发,自主研发了一套数据采集、挖掘、清洗、分析及可视化的数据处理系统,拥有上万家企业用户。热衷于为大家解决各种数据问题,服务号“前嗅”,微博“@前嗅大数据”,欢迎关注。

12-05 07:52