zoukankan      html  css  js  c++  java
  • 字符编码相关的知识

    1)字节和字符的区别

    ●字节和字符能有什么区别啊?不都是一样的吗?完全正确,但只是在古老的DOS时代。当Unicode出现后,字节和字符就不一样了。
    ●字节(octet)是一个八位的存储单元,取值范围一定是0~255。
    ●字符(character,或者word)为语言意义上的符号,范围就不一定了。例如在UCS-2中定义的字符范围为0~65535,它的一个字符占用两个字节。
     
    2)大端和小端的问题
    ●字符0xabcd,在计算机中,它的存储格式到底是 AB CD,还是 CD AB 呢?
    ●如果存储为 AB CD,则称为Big Endian 。
    ●如果存储为 CD AB,则称为Little Endian。
     
    3)unicode是什么
    ●Unicode的学名叫“Universal Multiple-Octer Coded Character Set”。
    ●Unicode是一种编码方式。
    ●任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。
     
    4)UCS是什么
    ●文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。
    ●UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。
    ●UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的
     
    5)UTF是什么
    ●UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。
    ●规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。
     
    6)BOM是什么
    ●字节顺序记号(英:byte-order mark,BOM)是位于码点 U+FEFF 的统一码字符(“零宽度无断空白”)。当以 UTF-16 或 UTF-32 来将UCS/统一码字符所组成的字串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以 UTF-8 、 UTF-16 或 UTF-32 编码的记号。
    ●不同编码的字节顺序记号的表示

      编码                              表示 (十六进制)

      UTF-8                           EF BB BF

      UTF-16(Big Endian)       FE FF

      UTF-16(Little Endian)    FF FE

      UTF-32(Big Endian)       00 00 FE FF 

      UTF-32(Little Endian)     FF FE 00 00
     
    7)UTF-16
    ●UTF-16由RFC2781规定,它使用两个字节来表示一个代码点。
    ●UTF-16是完全对应于UCS-2的,即把UCS-2规定的代码点通过Big Endian或Little Endian方式直接保存下来。
    ●UTF-16包括三种:UTF-16,UTF-16BE(Big Endian),UTF-16LE(Little Endian)。
    ●比如说char 'a', ascii为0x61
            UTF-16BE表示: 0x00, 0x61
            UTF-16LE表示: 0x61, 0x00
    而UTF-16就需要通过在文件开头以名为BOM(Byte Order Mark)的字符来表明文件是Big Endian还是Little Endian。
     
    8)UTF-32
    ●UTF-32用四个字节表示代码点,这样就可以完全表示UCS-4的所有代码点,而无需像UTF-16那样使用复杂的算法。
    ●与UTF-16类似,UTF-32也包括UTF-32、UTF-32BE、UTF-32LE三种编码,UTF-32也同样需要BOM字符。
     
    9)UTF-8
    ●UTF-16和UTF-32的一个缺点 :固定使用两个或四个字节,这样在表示纯ASCII文件时会有很多00字节,造成浪费。
    ●UTF-8用1~4个字节来表示代码点。
    ●从表中可以看出,单字节编码的第一字节为[00-7F],双字节编码的第一字节为[C2-DF],三字节编码的第一字节为[E0-EF]。这样只要看到第一个字节的范围就可以知道编码的字节数。
     
     
     
  • 相关阅读:
    bzoj 3992: [SDOI2015]序列统计【原根+生成函数+NTT+快速幂】
    bzoj 3771: Triple【生成函数+FFT+容斥原理】
    poj 2891 Strange Way to Express Integers【扩展中国剩余定理】
    hdu 1573 X问题【扩展中国剩余定理】
    bzoj 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁【生成函数||dp】
    hdu 1521 排列组合【指数型生成函数】
    JavaScript数据类型的检测
    JavaScript数据类型
    原生JS模拟jQuery $
    String基础
  • 原文地址:https://www.cnblogs.com/honglihua8688/p/3681260.html
Copyright © 2011-2022 走看看