TOP

Unicode快速指引
2014-11-12 18:15:06 】 浏览:9817
Tags:Unicode 快速 指引

  最近在弄的一个东西,由于一开始就没有规范好字符编码,结果遇到不少的困扰。《Windows核心编程》第一章就是讲字符编码,可见这东西的重要。于是痛定思痛,决定用UTF-8统一所有内部编码。重温了一些知识,整理出来备忘。


  1,简介


  Unicode学名"Universal Multiple-Octet Coded Character Set",简称UCS,是一套由国际组织维护的字符编码。UCS为现存的每一个字符都赋予一个唯一码值(code point),通常表示为U+xxxx,其中xxxx为对应的16进制码值


  UCS有两种格式:UCS-2 和 UCS-4。UCS-2为2字节编码,范围从U+0000~U+FFFF;UCS-4为4字节编码,范围从 U+00000000~U+7FFFFFFFF。目前Unicode4.0标准中,U+0000~U+FFFF区间已经包含了世界上所有语言的常用文字,简称BMP(Basic Multilingual Plane),加上其它的特殊符号扩展,最高也只用到了U+0010FFFF


  2,UTF编码


  UCS字符在计算机中的表示方式常用的有UTF-8,UTF-16,UTF-32。UTF-32用32位来表示单个UCS字符,跟UCS-4的码值一一对应。UTF-16以16位为单元来编码UCS字符,U+0000~U+FFFF范围内用单个16位值来表示,跟UCS-2一一对应,而 U+10000~U+10FFFF范围内的字符则需要用2个连续的16位值来表示;UTF-8以8位为单元进行编码,跟UTF-16类似,需要用到1~6 个连续的8位值来表示单个UCS字符(实际上由于目前UCS最高只用到了U+10FFFF,所以UTF-8编码的单个字符的长度不会超过4Byte)。具体算法如下表所示


  UCS-4到UTF-16的转换表:


  U+00000000~U+0000FFFF


  xxxxxxxxxxxxxxxx


  xxxxxxxxxxxxxxxx


  U+00010000~U+0010FFFF


  000uuuuuxxxxxxxxxxxxxxxx 110110wwwwxxxxxx 110111xxxxxxxxxx


  注1:wwww=uuuuu-1


  注2:U+DB00(1101100000000000)~U+DBFF(110110FFFFFFFFFF)称为High Surrogate,U+DC00(1101110000000000)~U+DFFF(110111FFFFFFFFFF)称为Low Surrogate。Surrogate区间只用于UTF-16中表示BMP之外的字符。BMP中除Surrogate之外的也被称为 character's scalar value


  UCS-4到UTF-8的转换表:


  U+00000000~U+0000007F


  0xxxxxxx


  U+00000080~U+000007FF


  110xxxxx 10xxxxxx


  U+00000800~U+0000FFFF



Unicode快速指引 https://www.cppentry.com/bencandy.php?fid=80&id=11907

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MFC中自定义窗口类名 下一篇C++sizeof使用规则及陷阱分析(5)