第一:编码简单描述

一、ASCII码:美国佬最初把自己的语言用计算表示,发现 0--127  能把字母表+其它符号全能表示出来

二、  iso 8859-1:欧洲人,0---127 是ASCII码,128--255 加了一些特殊符号

三、Unicode :就是设计出全世界语言即对应编码,就像编了一本大汉语字典。

定义地址范围,两个字节(16个2进制位)

所以查汉字,首先查Unicode 表,得出 基本编码。

现在编出来,哪么计算机到底如何存储这些编码,用几个字节呢!

对Unicode 编码进行加工。

1、出现 UTF-16    little endian(有无BOM) ,Big endian(有无BOM)。

对Unicode  两个字节的编码增加字节存放数或存放位置进行调整。

1>>然后根据两个字节有高低,存放的地址有高低,高低字节如何存---出现 little endian ,Big endian

2>>  Bom 区分UTF-8 EF BB BF,

UTF-16 FF FE

little endian(车尾压力小):重要的放在高地址,即低字节高地址,高字节低地址,低高高低。

Big endian(车尾压力大):  重要的放在低地址 。即低字节低地址,高字节高地址 ,低低高高。

2、UTF-8:解决Unicode 存贮ASCII浪费空间的问题,

编码规则: UTF-8(目前常用是把2个字节按地址分成三个区间,然后按照规则编写编码),UTF-32。

如 :1》对于ASCII码来说  1》一个旅馆一层楼就能住满客人,0---127 个小房间。

2》这下好,你增加一层楼,但是还是只住 同样数量的客人

**所以 Unicode 对于ASCII码在存贮到内存或硬盘,浪费一半的空间。

2》对汉字好像没影响,反正都是存贮 2个字节。

3》对于部分欧洲人来说,0---255 (一个字节)够了,也是浪费存贮空间。

所以出现 UTF-8

如果保存UTF-8文件内容:

第一:如果保存的字母在ASCII里,就直接存放ASCII的二进制,一个字节

第二:如果是汉字,哪么查找UNICODE表,看地址规定在UTF-8的那个地址范围内,就用几字节存。

**总结:ASCII存贮是省空间,但是其它中文,明明以前只要16位(2字节)现在有可能要三个字节表示。

四、GBK:用俩字节

第一字节:从129 开始往下编 0x81。

第二字节:从64---255 编码,即这8位是0100 0000----1111 1111

第二:例子

例如: 文本文件可保存的编码:

1、ASCII

2、UTF-16 little endian 有bom,UTF-16 little endian 无bom,

UTF-16 Big endian 有bom,UTF-16 Big endian 无bom,

3、UTF-8 有bom,UTF-8 无bom

例如:

严1a :gbk 0xD1 CF 31 61

严1a :unicode  0x4E25 31 61

1>查找unicode 代码过程 严 ----在网页:http://www.sojson.com/unicode.html 查Unicode得 10进制 #20005;

20005(十进制) = 100 1110 0010 0101(二进制)0x4E25

1:#49    49(十进制) = 110001(二进制)  0x31

a:#97       97(十进制) = 1100001(二进制) 0x61

2》查找 gbk         1:ASCII 表  0x31         a:ASCII 表  0x61    3.

严 --  http://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php 对应的代码 D1 CF

网络传输(TCP/IP):大尾(Big endian)即低字节低地址,高字节高地址 ,低低高高。

1.ASCII编码文件

D1 CF 31 61

保存: 1>对于0---127 的编码,就保存相应的ASCII码。

2>对于汉字编码就保存128 开始的两个字节里。

所以传给别人,非常方便区分。

****反正一个字节一个字节取,哪么当读到第一位是0,判断是ASCII码,读一个字节。

当读到第一位是1,判断是G BK码,因此连续读两个字节(从高地址往地址读)。

2、Unicode编码 :4E 25 0031 0061

little endian:每一个16位(2个字节),都是高字节低地址,低字节高地址。

例如 完整 一个16位:4E25(4E 高字节,25 低字节) 存放 反过来25 4E。每一个16位全部这样存放。

1>UTF-16 little endian 无bom              25 4E 31 00 61 00    (6个字节)

2> UTF-16 Big endian 无bom         00 25 00 4E 00 31 00 00 00 61 00 00  (12个字节)

3>UTF-16 little endian 有bom      FF FE 25 4E 31 00 61 00  (8个字节)

4>UTF-16 Big endian 有bom      FF FE 00 25 00 4E 00 31 00 00 00 61 00 00 (14个字节)

3、 UTF-8

1>UTF-8 (默认有Bom)    EF BB BF E4 B8 A5 31 61  (8个字节)

2>UTF-8  无Bom                            E4 B8 A5 31 61  (5个字节)

ASCII码表

Bin Dec Hex 缩写/字符 解释
00000000 0 00 NUL(null) 空字符
00000001 1 01 SOH(start of headling) 标题开始
00000010 2 02 STX (start of text) 正文开始
00000011 3 03 ETX (end of text) 正文结束
00000100 4 04 EOT (end of transmission) 传输结束
00000101 5 05 ENQ (enquiry) 请求
00000110 6 06 ACK (acknowledge) 收到通知
00000111 7 07 BEL (bell) 响铃
00001000 8 08 BS (backspace) 退格
00001001 9 09 HT (horizontal tab) 水平制表符
00001010 10 0A LF (NL line feed, new line) 换行键
00001011 11 0B VT (vertical tab) 垂直制表符
00001100 12 0C FF (NP form feed, new page) 换页键
00001101 13 0D CR (carriage return) 回车键
00001110 14 0E SO (shift out) 不用切换
00001111 15 0F SI (shift in) 启用切换
00010000 16 10 DLE (data link escape) 数据链路转义
00010001 17 11 DC1 (device control 1) 设备控制1
00010010 18 12 DC2 (device control 2) 设备控制2
00010011 19 13 DC3 (device control 3) 设备控制3
00010100 20 14 DC4 (device control 4) 设备控制4
00010101 21 15 NAK (negative acknowledge) 拒绝接收
00010110 22 16 SYN (synchronous idle) 同步空闲
00010111 23 17 ETB (end of trans. block) 传输块结束
00011000 24 18 CAN (cancel) 取消
00011001 25 19 EM (end of medium) 介质中断
00011010 26 1A SUB (substitute) 替补
00011011 27 1B ESC (escape) 溢出
00011100 28 1C FS (file separator) 文件分割符
00011101 29 1D GS (group separator) 分组符
00011110 30 1E RS (record separator) 记录分离符
00011111 31 1F US (unit separator) 单元分隔符
00100000 32 20 (space) 空格
00100001 33 21 !  
00100010 34 22 "  
00100011 35 23 #  
00100100 36 24 $  
00100101 37 25 %  
00100110 38 26 &  
00100111 39 27 '  
00101000 40 28 (  
00101001 41 29 )  
00101010 42 2A *  
00101011 43 2B +  
00101100 44 2C ,  
00101101 45 2D -  
00101110 46 2E .  
00101111 47 2F /  
00110000 48 30 0  
00110001 49 31 1  
00110010 50 32 2  
00110011 51 33 3  
00110100 52 34 4  
00110101 53 35 5  
00110110 54 36 6  
00110111 55 37 7  
00111000 56 38 8  
00111001 57 39 9  
00111010 58 3A :  
00111011 59 3B ;  
00111100 60 3C << td="">  
00111101 61 3D =  
00111110 62 3E >  
00111111 63 3F ?  
01000000 64 40 @  
01000001 65 41 A  
01000010 66 42 B  
01000011 67 43 C  
01000100 68 44 D  
01000101 69 45 E  
01000110 70 46 F  
01000111 71 47 G  
01001000 72 48 H  
01001001 73 49 I  
01001010 74 4A J  
01001011 75 4B K  
01001100 76 4C L  
01001101 77 4D M  
01001110 78 4E N  
01001111 79 4F O  
01010000 80 50 P  
01010001 81 51 Q  
01010010 82 52 R  
01010011 83 53 S  
01010100 84 54 T  
01010101 85 55 U  
01010110 86 56 V  
01010111 87 57 W  
01011000 88 58 X  
01011001 89 59 Y  
01011010 90 5A Z  
01011011 91 5B [  
01011100 92 5C \  
01011101 93 5D ]  
01011110 94 5E ^  
01011111 95 5F _  
01100000 96 60 `  
01100001 97 61 a  
01100010 98 62 b  
01100011 99 63 c  
01100100 100 64 d  
01100101 101 65 e  
01100110 102 66 f  
01100111 103 67 g  
01101000 104 68 h  
01101001 105 69 i  
01101010 106 6A j  
01101011 107 6B k  
01101100 108 6C l  
01101101 109 6D m  
01101110 110 6E n  
01101111 111 6F o  
01110000 112 70 p  
01110001 113 71 q  
01110010 114 72 r  
01110011 115 73 s  
01110100 116 74 t  
01110101 117 75 u  
01110110 118 76 v  
01110111 119 77 w  
01111000 120 78 x  
01111001 121 79 y  
01111010 122 7A z  
01111011 123 7B {  
01111100 124 7C |  
01111101 125 7D }  
01111110 126 7E ~  
01111111 127 7F DEL (delete)

iso 8859-1

Unicode符号范围   | UTF-8编码方式
  (十六进制)       |       (二进制)
--------------------+---------------------------------------------
  0x0000---0x007F | 0xxxxxxx
  0x0080---0x07ff | 110xxxxx 10xxxxxx
  0x0800---0xffff | 1110xxxx 10xxxxxx 10xxxxxx

上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

下面,还是以汉字"严"为例,演示如何实现UTF-8编码。

已知"严"的unicode是4E25(0100 1110 0010 0101)

根据上表,可以发现4E25处在第三行的范围内(0000 1000 0000 0000-1111 1111 1111 1111),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是"11100100 10111000 10100101",转换成十六进制就是E4B8A5。

参考文章:

ASCII码表

【1】http://www.fmddlmyy.cn/text16.html

Unicode 字符编码表

【2】http://www.cnblogs.com/chenwenbiao/archive/2011/08/17/2142718.html

【3】http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

utf-8和utf-16.

【4】http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html

gbk编码

【5】 http://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php

     UTF-8(目前常用是把2个字节按地址分成三个区间,然后按照规则编写编码),UTF-32。

ascii码 iso 8859-1 Unicode 字符编码 UTF8编码 区别 表格相关推荐

  1. 一文读懂字符编码(ASCII、ISO 8859、GB系列、Unicode)

    一文读懂字符编码(ASCII.ISO 8859.GB系列.Unicode) 一.字符编码相关组织 1.1 ANSI 美国国家标准学会 1.2 Ecma 国际 1.3 ISO/IEC 1.4 统一码联盟 ...

  2. ASCII码、ISO8859-1、Unicode、GBK和UTF-8 的区别

    为什么需要编码? 计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个 ...

  3. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  4. python编码使用ascii编码_Python中的编码问题:ASCII码 Unicoden编码 UTF-8编码

    编码 字符串是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节 ...

  5. [转] java - 过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解

    标签 PostgreSQL , java , Greenplum , 0x00 , 空字符 , NUL , 数据清洗 , 规则 , 过滤 , 非法字符 背景 原文 http://www.codeweb ...

  6. 过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解, 去^@,^M

    今天产品部同事报告了一个BUG,经过调试发现,由于用户输入的字符串中,包含字符0x1E, 也就是"记录分隔符"(Record Separator, Notepad++ 显示为[RS ...

  7. 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...

  8. python输出字符的ascii码_如何获取一个字符的ASCII码

    如何获取一个字符的ASCII码 Python内置ord函数 用来将字符转化成ASCII码 用法为: print('字符0 的ASCII码表示为',ord('0')) 结果为: 字符0 的ASCII码表 ...

  9. ASCII码对照表 八进制 十六进制 十进制 字符

    背景: 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难. 因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解. 为保证人 ...

最新文章

  1. python 无头模式 绕过检测_Python chrome 无头模式的问题
  2. Struts和Sitemesh整合,实现多个装饰器
  3. python mk趋势检验_【C语言】MK趋势检验C语言代码
  4. Stack:删除并返回栈顶元素?
  5. 温故知新,.Net Core遇见Blazor(FluentUI),属于未来的SPA框架
  6. js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
  7. Liunx下使用Nginx负载均衡
  8. 在centos服务器上安装配置私人邮箱,并在web端管理邮件
  9. 恰当地利用中间结果集
  10. python 迭代器相关知识
  11. SonarQube遇到的启动问题及解决方案
  12. Mac电脑疑似中毒该怎么应对处理?
  13. 计算机实习工作计划与实施步骤,实习工作计划与实施步骤范文
  14. android 电话号码,Android中的电话号码自动格式化
  15. Java 继承思想 及其在 Minecraft mod中相关应用
  16. 华为发展鸿蒙再出奇招,学习宝马推出官方认证二手手机
  17. Android - 屏幕适配
  18. 她只用一个方法,就把英语拿下了!
  19. stm32f103移植ucosIII系统
  20. OpenCV - C++实战(05) — 颜色检测

热门文章

  1. 2018安恒杯10月月赛REamp;amp;MISC周周练
  2. 学习《Linux就该这么学》第九课
  3. 截取字符串后几位 php,字符串截取的几种办法(php,js,css三种)
  4. selenium实现web自动化测试
  5. github报错:but GitHub does not provide shell access
  6. spring boot项目多个配置文件的profiles.active读取优先级
  7. 金融危机下企业电子商务发展
  8. 程序员如何提高生产效率?
  9. 人脸识别测温门禁一体机
  10. 计算机知识搞笑句子,20句幽默有趣经典的句子,句句精辟(收好)