zoukankan      html  css  js  c++  java
  • 再理解Unicode

    1. Unicode,UCS-2, UCS-4, UTF-8, UTF-16, UTF-32
    --字节和字符的区别。一个字符可以用多个字节来存储表达。
    --Big Endian和Little Endian

    上面提到了一个字符可能占用多个字节,那么这多个字节在计算机中如何存储呢? 比如字符0xabcd,它的存储格式到底是 AB CD,还是 CD AB 呢?

    实际上两者都有可能,并分别有不同的名字。如果存储为 AB CD,则称为Big Endian; 如果存储为 CD AB,则称为Little Endian

    具体来说,以下这种存储格式为Big Endian,因为值(0xabcd)的高位(0xab)存储在前面:

    地址
    0x00000000AB
    0x00000001CD

    相反,以下这种存储格式为Little Endian:

    地址
    0x00000000CD
    0x00000001AB
    --Unicode:Unicode defines a huge character set, assigning one unique integer value to every graphical symbol. UTF8/16/32 are simply different ways to encode this.Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。代码点的值通常写成 U+ABCD 的格式。
    --UCS-2/UCS-4:文字和代码点之间的对应关系就是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是一样的。要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format)
    --UTF-8/16/32:三种Unicode编码方式。
      UTF8:variable,1-4个字节表示
      UTF16:variable, 2-4个字节表示
      UTF32:fixed size,4个字节。
    --Windows上Unicode是UTF-16 little endian编码;LInux上Unicode是UTF8编码。
    --考虑到最初的目的,通常说的Unicode就是指UTF-16
    2. Why Unicode?
    在Unicode出现之前,各种语言字符的编码存储是通过Code Page的方式来实现的。即不同的语言,制定自己的字符集,用Code Page自己的编码方式来表达其字符集中的每个字符。其编码解码需要安装对应Code Page。比如:如果一段中文是GB2312编码的,保存在a.txt中,然后copy到了另一台电脑上。为了能正确显示这段文字,必须在目标机器上安装相应的Code Page并指定为non-Unicode program的默认Code Page。

    参考:Unicode详解    (http://tech.idv2.com/2008/02/21/unicode-intro/)
  • 相关阅读:
    FPGA 设计怎样进行面积优化(逻辑资源占用量优化)
    实现文件下载的java代码
    java推断字符串是否为乱码
    cocos2dx 制作单机麻将(二)
    CPU 风扇清理灰尘加油全过程图解
    初识 Cloudera Impala
    怎样设计接口?
    Android ViewPager使用具体解释
    php反射类 ReflectionClass
    memwatch的使用
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/2093644.html
Copyright © 2011-2022 走看看