ascii码 iso 8859-1 Unicode 字符编码 UTF8编码 区别 表格

来源:互联网 发布:java工作流开发 编辑:程序博客网 时间:2024/05/18 10:06

第一:编码简单描述

      一、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码表

BinDecHex缩写/字符解释00000000000NUL(null)空字符00000001101SOH(start of headling)标题开始00000010202STX (start of text)正文开始00000011303ETX (end of text)正文结束00000100404EOT (end of transmission)传输结束00000101505ENQ (enquiry)请求00000110606ACK (acknowledge)收到通知00000111707BEL (bell)响铃00001000808BS (backspace)退格00001001909HT (horizontal tab)水平制表符00001010100ALF (NL line feed, new line)换行键00001011110BVT (vertical tab)垂直制表符00001100120CFF (NP form feed, new page)换页键00001101130DCR (carriage return)回车键00001110140ESO (shift out)不用切换00001111150FSI (shift in)启用切换000100001610DLE (data link escape)数据链路转义000100011711DC1 (device control 1)设备控制1000100101812DC2 (device control 2)设备控制2000100111913DC3 (device control 3)设备控制3000101002014DC4 (device control 4)设备控制4000101012115NAK (negative acknowledge)拒绝接收000101102216SYN (synchronous idle)同步空闲000101112317ETB (end of trans. block)传输块结束000110002418CAN (cancel)取消000110012519EM (end of medium)介质中断00011010261ASUB (substitute)替补00011011271BESC (escape)溢出00011100281CFS (file separator)文件分割符00011101291DGS (group separator)分组符00011110301ERS (record separator)记录分离符00011111311FUS (unit separator)单元分隔符001000003220(space)空格001000013321! 001000103422" 001000113523# 001001003624$ 001001013725% 001001103826& 001001113927' 001010004028( 001010014129) 00101010422A* 00101011432B+ 00101100442C, 00101101452D- 00101110462E. 00101111472F/ 0011000048300 0011000149311 0011001050322 0011001151333 0011010052344 0011010153355 0011011054366 0011011155377 0011100056388 0011100157399 00111010583A: 00111011593B; 00111100603C<< td=""> 00111101613D= 00111110623E> 00111111633F? 010000006440@ 010000016541A 010000106642B 010000116743C 010001006844D 010001016945E 010001107046F 010001117147G 010010007248H 010010017349I 01001010744AJ 01001011754BK 01001100764CL 01001101774DM 01001110784EN 01001111794FO 010100008050P 010100018151Q 010100108252R 010100118353S 010101008454T 010101018555U 010101108656V 010101118757W 010110008858X 010110018959Y 01011010905AZ 01011011915B[ 01011100925C\ 01011101935D] 01011110945E^ 01011111955F_ 011000009660` 011000019761a 011000109862b 011000119963c 0110010010064d 0110010110165e 0110011010266f 0110011110367g 0110100010468h 0110100110569i 011010101066Aj 011010111076Bk 011011001086Cl 011011011096Dm 011011101106En 011011111116Fo 0111000011270p 0111000111371q 0111001011472r 0111001111573s 0111010011674t 0111010111775u 0111011011876v 0111011111977w 0111100012078x 0111100112179y 011110101227Az 011110111237B{ 011111001247C| 011111011257D} 011111101267E~ 011111111277FDEL (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。
0 0
原创粉丝点击