浅谈编码Base6四、Hex、UTF-八、Unicode、GBK等

  网络上大多精彩的回答,该随笔用做自我总结;linux

  首先计算机只认得二进制,0和1,因此咱们如今看到的字都是通过二进制数据编码后的;计算机能针对0和1的组合作不少事情,这些规则都是人定义的;而后有了字节的概念,8比特一个字节,如01011100就是一个字节;网络

  人定义好计算机的0和1的数据结构作事的时候,若是每一个人都用不一样的数据结构,不一样的定义,就会使得人和人之间让计算机作的事没法统一,也致使没法通信,因此要一块儿共同定义一套你们都认同的规则,其中ASCii码就是最初始的交换码,用作记录信息、交互信息的;数据结构

  相同的字节串不一样的编码就会有不一样的展现,只有正确的编码才能表达出字符串自己要记载的信息,而信息是面向人的,只有人能识别,才叫信息,只是偶尔被计算机理解;工具

字节、字符与字符串:编码

  字节是8比特位构成,上传已经说了;spa

  字符是用字节构成的,但多少字节,怎么构成咱们认识的惟一的字符?这个由编码格式决定,也就是Unicode、GBK,(为啥要用字节?,由于历史以为8比特很牛逼啊)操作系统

  字符串是字符的序列,各类计算机语言不一样表示,如Redis就和C的字符串不同,C是以 ‘\0’ 结尾;咱们说的对字符的编码,而不是字符串;code

Hex用字符串形式看二进制代码:ip

  首先,二进制文件一般不易于人看,由于人会看眼花,因此必须转为其余进制,16进制是最好的,恰好2字符表示一个字节unicode

  Hex编码是以4比特做为一个单位编码,用4是由于计算机进位是2的倍数,而为了能把比特串分割开来,最适中就是取16进制;因此Hex编码就是16进制编码;用于人类比用比特更直观简介的方式看待比特串(立刻反应过来比特串),固然取更多位不适合人口算;

  而后咱们就有了WinHex这个工具的命名;用它修复二进制文件很不错,前提你对该文件二进制构表(通常是具备协议去解析二进制的,我称之为构表协议吧)很熟;

  Base64是面向网络的,其实性质也是这样;

Unicode、GBK都是字符串编码:

  看到知乎一个alipay的说啥编码和编码格式不一样,gbk是unicode的编码格式,简直笑死人;

  重复一遍,字符是独一无二的,人类符号系统抽象的产物,世界惟一,全世界的字符构成字符集,字符也是在演进的;而Unicode和GBK等都是字符的一种编码;也就是一个二进制比特串(数字)和字符的映射表;

Java内部是Unicode默认,以及其面向字符、面向字节

  对于一个抽象字符,在Java中的二进制表示固然须要编码,用的就是Unicode,若是源文件存储并不是Unicode怎么办呢?固然须要转换,所以Java不少面向字符流的I/O其实都是默认有转换规则存在;

  这里提下I/O都分面向字节和字符,其实面向字节就是无论编码,而面向字符是带编码转换,是的一个抽象字符串如 “饭” 是在哪一种编码格式都表示 “饭”,所以面向字符I/O指定编码格式很重要,通常不指定采用默认,如win操做系统默认GBK,而linux默认UTF-8;

UTF-8和Unicode是哈夫曼编码:

  本身去查一下吧,是哈夫曼编码转换的

    Unicode

  UTF-8

  0000 - 007F

  0xxxxxxx

  0080 - 07FF

  110xxxxx 10xxxxxx

  0800 - FFFF

  1110xxxx 10xxxxxx 10xxxxx

 

 

  待续

相关文章
相关标签/搜索