• Unicode


    分别从 编码、存储、编程 三个方面描述对于 Unicode 的理解。
    
    1. 编码:
    Unicode 代表了一种编码方式,所有的字符,都用一个唯一的数字表示。Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。
    ASCII 码: 美国指定的标准,规定了 英语字符 与 二进制位 的关系,规定了 0~127 所代表的英语字符,占 7 个 bit。
    非 ASCII 码: 欧洲、亚洲等国家为了能够表示自己国家的字符,又要与 ASCII 码兼容,就需要使用 127 以上的数字来表示。
    每个国家制订了自己的标准,但都与 ASCII 兼容。这样同一个数字,在不同国家的编码标准上很可能代表不同的意义。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel,在俄语编码中又会代表另一个符号。
    Unicode 码:世界上存在着许多种编码方式,同一个二进制数字可以被解释成不同的符号。如果想要打开一个文件,就必须要知道它的编码方式,否则就会出现乱码。
    所以就有了 Unicode, 它将世界上所有的符号都纳入其中,每一个符号都有独一无二的编码。
    
    2. 存储:
    Unicode 只规定了 数字 和 字符 之间的映射关系,并没有规定这个二进制数字怎样存储到内存中。
    于是出现了各种 Unicode 编码的存储方式:
    Unicode标准提供三种不同的编码格式:UTF-8,UTF-16,UTF-32
    UTF-32:每隔编码单元长为 4 字节, 与 Unicode 编码一一对应。
    UTF-16:在UTF-16中,在范围U+0000到U+FFFF间的码点使用一个单一的16位编码单元表示;而在范围U+10000到U+10FFFF间的码点则使用一对16位编码单元表示,称作代理对(surrogate pair)。 所以 UTF-16 是变长的编码,有时候会出现 4 字节表示一个编码的格式。
    UTF-8:变长存储方式,ASCII 码只有一个字节存储,中文字符要三个字节存储。
    
    UCS2:是 UTF-16 的子集,固定编码长度,每个字符用 2 个字节表示。
    GBK:国标码,ASCII 用 1 个字节表示,中文字符用 2 个字节表示。
    
    3. 编程:
    为什么要有 char、wchar_t 的区别?
    ASCII 或者 Unicode 字符串,存储到内存中后都是二进制数据,在计算机看来没有什么区别,char 也可以存储 Unicode 字符串, wchar_t 也可以存储 ASCII 字符串,只不过在处理的时候要小心各种问题罢了。
    用 char 来存储 ASCII 或者 UTF-8 字符串,strlen、strcmp 等字符串处理函数可以方便地去处理。
    用 wchar_t 来存储 Unicode 字符串,有 wstrlen 等方法可以方便地去处理。
    之所以又多出来一个 wchar_t ,只是为了方便编程罢了。

    http://blog.jobbole.com/76376/

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

    http://www.cppblog.com/tx7do/archive/2008/06/26/54617.html

  • 相关阅读:
    插播一条 WMI修复教程
    DirectX12 3D 游戏开发与实战第八章内容(上)
    陆地与波浪演示程序(第七章内容)
    DirectX12 3D 游戏开发与实战第七章内容(下)
    C++匿名函数的使用
    绘制多种几何体演示程序(第七章内容)
    DirectX12 3D 游戏开发与实战第七章内容(上)
    DirectX12 3D 游戏开发与实战第六章内容
    DirectX12 3D 游戏开发与实战第五章内容
    无法解析的外部符号
  • 原文地址:https://www.cnblogs.com/zuibunan/p/3878667.html
Copyright © 2020-2023  润新知