常用编码格式介绍

编程过程中经常会遇到各类字符的编码方式,经常会混淆,在此总结下常用的编码方式以及其原理。

Ascii:

  因为对于计算机来说只能识别0、1这两种字符(0表示低电平,1表示高电平),所有的数据都是通过二进制来表示,对于其他的比如说3、4、s、z、#等字符用二进制表示就需要一个约定的规范,这就是ascii的由来。

  Ascii码表是用1个字节来表示128种字符(一个字节8位,可以组成256种字符,首位默认为0,所以ASCII最多就128个字符,当首位为1的时候我们后面再讨论),其中0-31和127表示控制字符,他们是不可见字符。

  32-126是可见字符,48-57表示0-9,65-90为26个大写英文字母,97-122是26个小写英文字母。

GBK:

  现在英文和数字都有了,但是我们中国汉字怎么表示呢?此时GBK应运而生,上面我们得知ASCII首位为0,假如把它改成1,就表示中文。GBK由2个字节来表示,第一个字节的最高位是0则表示字母和数字,假如是1则表示中文。

Unicode:

  Unicode则是收录了世界上所有的语言, 但是在运用过程种会出现很多问题,比如一个3个字节的字符,如何区分他是1个unicode还是3个asicii,还有假如使用unicode,英文字母高位都会设置成0,这就造成了很大的浪费。因此UTF-8、UTF-16、UTF-32就出现来解决这些问题,主要讲当前互联网上用的的UTF-8

UTF-8:

  UTF-8的规则很简单就两条:

  1、 对于单字节的字符,最高位为0,其实跟ascii表示一致

  2、 对于n个字节的字符,第一个字节的最高位为n个1,第n+1设为0,后面每个字节的前两位都为10,剩下的用字符对应的unicode来表示,如下图

  Unicode符号范围 | UTF-8编码方式
  (十六进制) | (二进制)
  --------------------+---------------------------------------------
  0000 0000-0000 007F | 0xxxxxxx
  0000 0080-0000 07FF | 110xxxxx 10xxxxxx
  0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
  0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

BCD:

  BCD编码主要用于数字0-9的压缩,因为0-9二进制表示为0000 0000到0000 1001,它们的前4位都是0,把他们合并就生成一个新的字符。

比如2个字符’1’,’9’,他们对应的Ascii为0x31和0x39,因此表示形式则为2个字节0x31 0x39

假如用BCD格式来表示则将其数字对应的二进制前4位去掉,然后合并,即将00000001和00001001前4位去掉得到0001 1001,得到新的1个字节0x19,这样看起来就跟十进制一样,这就是BCD压缩码的原理。

Base64编码:

  Base64编码的作用是将ascii里面的不可见字符变成可见字符来传输。Base64编码的最小使用单元是4个字节,每个字节使用6位,假如不足6的整数倍,则后面补0,剩下的字符补=,因为计算机存储字节是8位,所以计算字符值时在前面补2个0。

可能说的有些绕,看下一张图就了解了

(借用网上的一张图片 http://www.cnblogs.com/caoyc/p/5794720.html)

原文地址:https://www.cnblogs.com/xiaojidanbai/p/10826472.html

时间: 2024-10-13 06:55:26

常用编码格式介绍的相关文章

不同的编码格式介绍

近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了,下面全是从网上搜来的: 1.  ASCII和Ansi编码    字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为     单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.     双字节内码 -- Double-Byte character sets)(DBCS),可以支持65000个字符编码.前者

转:maven常用命令介绍

mvn 3.0.4 创建maven项目命令 mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles-autocredit  -DarchetypeArtifactId=maven-archetype-quickstart     -DinteractiveMode=false  -X 1 下载源代码:mvn dependency:sources -DdownloadSources=true -Dd

Notepad++前端开发常用插件介绍

Notepad++前端开发常用插件介绍 Notepad++除了自身的功能强大之外,更是有许多非常的优秀的插件,下面就总结一下前端开发过程一些比较常用的插件. Emmet Emmet的前身是Zen Coding,一款使用仿CSS选择器的语法来快速开发HTML和CSS的插件,是前端开发神器.它无视了编辑器的自动提示和自动完成,秒杀了你自定义的各种快捷键或者 AHK 的热字符串,以智能简洁高效的缩短输入,带给你超快速地书写各种复杂而枯燥的 HTML 和 CSS 代码的体验.现在可以在Notepad++

webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server

一.webpack基础 1.在项目中生成package.json:在项目根目录中输入npm init,根据提示输入相应信息.(也可以不生成package.json文件,但是package.json是很有用的,所有建议生成) 2.安装webpaack a.在全局中安装webpack:npm install webpack -g b.将webpack安装到项目并将webpack写入package.json的devDependencies中:进入项目根目录,然后在命令行中输入npm install w

keepalived高可用的常用功能介绍

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.本篇文章会介绍keepalived的安装,配置,还有keepalived的一些脚本,keepalived+nginx高可用实现和keepalived双机互为主从的实现. keep

debug常用命令介绍(学习汇编)

显示所有寄存器内容 格式:-r  功能:以十六进制形式显示cpu内部个寄存器的值:以符号形式显示标志寄存器的各标志位(除tf外)的值:并将CS:IP所指的内存内容反汇编成一条指令,可视为将要执行的指令.如: -r   回车AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000DS=0AF0  ES=0AF0  SS=0AF0  CS=0AF0  IP=0200   NV UP EI PL NZ NA PO NC

网络方面的常用命令 & 常用端口介绍

在网络方面我们常常会用到如下命令: (1)ping命令:我们常常用来判断2台或2台以上的机器间是否网络连通. ping 192.168.1.88 -t 如果想看任何命令的参数是什么意思,我们只需要:命令 /?就可以查看该命令的用法了.如下图: (2)ipconfig命令:往往是用来查看我们计算机的IP.网关.子网掩码.DNS等信息 ipconfig -all (3)netstat命令:查看本地计算机的TCP和UDP端口是否监听 netstat -a (4)telnet命令: 1)telnet提供

Grafana、collectd 和 InfluxDB 打造酷炫监控系统(四)常用插件介绍和自定义数据篇

一.常用插件介绍 获取指定端口的连接状态ESTABLISHED.CLOSE_WAIT.LISTEN等 tcpconns: <Plugin tcpconns> ListeningPorts false LocalPort "80" RemotePort "80" </Plugin> 获取Nginx的状态 nginx: <Plugin nginx> URL "http://test.tt.com/NginxStatus&qu

C#文件读写常用类介绍

首先要熟悉.NET中处理文件和文件夹的操作.File类和Directory类是其中最主要的两个类.了解它们将对后面功能的实现提供很大的便利.      本节先对和文件系统相关的两个.NET类进行简要介绍.  System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法.  (1) 文件打开方法:File.Open () 该方法的声明如下: public static FileS