Unicode码
字符编码(1)——Unicode,utf-8

字符编码(1)——Unicode,utf-8字符编码编码是⼀个将⼀组Unicode字符转换业个字节序列的过程。
⽽解码是将⼀个编码字节序列转换为⼀组Unicode字符的过程。
Unicode字符是什么?Unicode字符集可以简写为UCS,也就是Unicode charactor setUnicode编码是国际组织制定的可以容纳世界上所有⽂字和符号的字符编码⽅案。
它通过0到0x10FFFF来映射字符,最多可容纳1114112个字符(16进制的10FFFF的值是1114111,然后加⼀个0x000000就是1114112个)。
可以看⼀下1114112的⼆进制表⽰形式为:1 0001 00000000 00000000UTF是什么?UTF是Unicode转换格式的意思,是UCS Transformation Format的缩写。
Utf-8UTF-8以字节为单位对Unicode进⾏编码。
utf-8特点是对不同范围的字符⽤不同长度的编码。
从Unicode到UTF-8的编码⽅式如下:Unicode编码(16进制) ║ UTF-8 字节流(⼆进制)000000 - 00007F ║ 0xxxxxxx000080 - 0007FF ║ 110xxxxx 10xxxxxx000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx010000 - 10FFFF ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx例如:“赵”这个字的Unicode编码(16进制表⽰⽅法)是:8d 75这个编码在.net中可以通过ToString()⽅法来实现。
为了进⾏后边的说明。
这⾥先给出测试⽤的转换⽅法:public static class CharSetHelper{public static string TransCoding(this int iValue,eTrans eType){return Convert.ToString(iValue, (int)eType);}public static string GetCorrectCoding(this string selfChar, Encoding encoding, eTrans eType){int iUnicode = (int)char.Parse(selfChar);return iUnicode.TransCoding(eType);}}public enum eTrans{Binary=2,Octonary=8,Decimal=10,Hexadecimal=16}⼀个枚举,⽤于枚举数的进制,⼀个从字串转换到特定的字符编码,并以指定进制表⽰的⽅法。
unicode和unicode编码

unicode和unicode编码unicode编码是什么?这其实是两个问题,unicode 是什么什么?unicode是怎样编码的?Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language.unicode 为每⼀个字符提供了唯⼀的编号,不区分平台,程序和语⾔百度百科:Unicode(统⼀码、万国码、单⼀码)是计算机科学领域⾥的⼀项业界标准,包括字符集、编码⽅案等。
Unicode 是为了解决传统的字符编码⽅案的局限⽽产⽣的,它为每种语⾔中的每个字符设定了统⼀并且唯⼀的⼆进制编码,以满⾜跨语⾔、跨平台进⾏⽂本转换、处理的要求。
Unicode 当然是⼀本很厚的字典,记录着世界上所有字符对应的⼀个数字。
具体是怎样的对应关系,⼜或者说是如何进⾏划分的,就不是我们考虑的问题了,我们只⽤知道 Unicode 给所有的字符指定了⼀个数字⽤来表⽰该字符。
Unicode 编码⽅案Unicode其实仅仅只是⼀个字符集,规定了符合对应的⼆进制代码,⾄于这个⼆进制代码如何存储则没有任何规定。
它的想法很简单,就是为每个字符规定⼀个⽤来表⽰该字符的数字,仅此⽽已。
Unicode 没有规定字符对应的⼆进制码如何存储。
以汉字“汉”为例,它的 Unicode码点1 是 0x6c49,对应的⼆进制数是110110*********,⼆进制数有 15 位,这也就说明了它⾄少需要 2 个字节来表⽰。
可以想象,在 Unicode 字典中往后的字符可能就需要 3个字节或者 4 个字节,甚⾄更多字节来表⽰了。
这就导致了⼀些问题,计算机怎么知道你这个 2 个字节表⽰的是⼀个字符,⽽不是分别表⽰两个字符呢?这⾥我们可能会想到,那就取个最⼤的,假如 Unicode 中最⼤的字符⽤ 4 字节就可以表⽰了,那么我们就将所有的字符都⽤ 4 个字节来表⽰,不够的就往前⾯补 0。
unicode编码详解,一看就懂

unicode编码详解,⼀看就懂⼀、Unicode编码1 UTF-8 -16 -32编码和Unicode编码 Unicode编码是⼀种计算机字符编码标准,其实个⼈认为叫字符集更为准确;⽽我们熟悉的UTF-8 UTF-16 UTF-32是Unicode的具体实现(怎么存储在计算机)。
1)Unicode编码规范制定标准: 把世界上所有能出现的字符,都为其分配⼀个数字来表⽰,⽐如,数字U+7F57被分配给了汉字中的"罗"字。
Unicode编码的标准⾥字符数量⼀直实在新增(包括⼀些稀有字符,当然emoji表情字符也属于unicode编码哈哈),19年3⽉刚发布了Unicode12.0版本,⽐之前的版本新增了⼀些字符,现在在标准中的字符⼀共有137929个,⽽Unicode编码⽬前规划了U+0000⾄U+10FFFF为unicode编码(以世界上字符的数量应该是很久不会考虑扩展的),算⼀下⽬前还剩下976183(1114112-137929)个代码点,这976183个代码点是规划在unicode中的数字,但是还没被分配对应的字符。
2)UTF-8编码: UTF-8可以说是当前互联⽹最常⽤的编码格式了,它基于Unicode字符集进⾏编码设计。
它最⼤的特点是变长字节的编码设计,⼀个字符最长4个字节,最少1个字节,⼤部分的中⽂字符占3个字节。
编码规则如下: 1.⽤⼀个字节表⽰的字符,第⼀位设为 0,后⾯的 7 位对应这个字符的 Unicode 码点。
由于这128个字符的unicode完全对照ASCII码,可以说完全向下兼容ASCII码。
即ASCII编码的⽂件可以⽤UTF-8打开⽽不乱码; 2.⽤⼀个字节以上表⽰的字符,假设是N个字节表⽰这个字符:则该字符第⼀个字节的前N位都为1,第N+1位为0,剩下的N-1个字节的前两位都设为10,剩下没有主动设值的位置则使⽤这个字符的Unicode⼆进制代码点从低位到⾼位填充,不够⽤0补⾜。
Unicode编码是什么

Unicode编码是什么Unicode编码是什么⼀、总结⼀句话总结:> 1、Unicode码扩展⾃ASCII字元集。
Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。
> 2、Unicode是⼀个编码⽅案,Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占⽤⼀到四个字节,utf-16占⽤⼆或四个字节,utf-32占⽤四个字节。
1、ASCII码7位,Unicode16位?)字元集> 在严格的ASCII中,每个字元⽤7位元(2^7=128,2^8=256)表⽰,Unicode使⽤全16位元(2^16=65,536)字元集⼆、Unicode编码是什么是⼀个编码⽅案,Unicode 是为了解决传统的字符编码⽅案的局限⽽产⽣的,它为每种语⾔中的每个字符设定了统⼀并且唯⼀的编码,以满⾜跨语⾔、跨平台进⾏⽂本转换、处理的要求。
Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占⽤⼀到四个字节,utf-16占⽤⼆或四个字节,utf-32占⽤四个字节。
Unicode 码在全球范围的信息交换领域均有⼴泛的应⽤。
Unicode码扩展⾃ASCII。
在严格的ASCII中,每个字元⽤7位元表⽰,或者电脑上普遍使⽤的每字元有8位元宽;⽽Unicode使⽤全16位元字元集。
这使得Unicode能够表⽰世界上所有的书写语⾔中可能⽤於电脑通讯的字元、象形⽂字和其他符号。
Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。
考虑到ASCII是电脑中最具⽀配地位的标准,所以这的确是⼀个很⾼的⽬标。
Unicode影响到了电脑⼯业的每个部分,但也许会对作业系统和程式设计语⾔的影响最⼤。
从这⽅⾯来看,我们已经上路了。
Windows NT 从底层⽀持Unicode。
计算机中⽤得最⼴泛的及其编码,是由(ANSI)制定的ASCII码(American Standard Code for Information Interchange,),它已被(ISO)定为国际标准,称为ISO 646标准。
unicode编码概念

Unicode(统一码)是一种用于字符编码的国际标准。
它旨在为世界上所有的文字字符提供唯一的标识,以解决不同字符集和编码方案之间的混乱。
Unicode 包含了几乎所有已知的文字,符号和标点符号,并为每个字符分配了一个唯一的数字,称为码点。
以下是一些关键概念:1.码点(Code Point):Unicode 中的每个字符都对应一个唯一的数字,这个数字称为码点。
码点通常用十六进制表示,前缀为"U+"。
例如,拉丁字母A 的码点是U+0041。
2.编码单元(Code Unit):在计算机存储中,Unicode 字符可能需要多个字节来表示。
编码单元是存储中的最小单位。
在UTF-8编码中,一个字符可能由1到4个字节组成,而在UTF-16编码中,一个字符通常由2个字节表示。
3.编码方案:Unicode 定义了不同的编码方案,用于将码点映射到实际的字节序列。
常见的编码方案包括UTF-8、UTF-16 和UTF-32。
它们使用不同的规则将码点映射到字节,以及将字节转换回码点。
4.UTF-8:UTF-8 是一种可变长度的编码方案,使用1到4个字节表示一个字符。
它是最常见的Unicode 编码,适用于互联网传输和存储。
5.UTF-16:UTF-16 是一种可变长度的编码方案,使用2或4个字节表示一个字符。
它在某些应用程序和平台中使用较多。
6.UTF-32:UTF-32 是一种固定长度的编码方案,使用4个字节表示一个字符。
它在内存中的表示更为直观,但通常会占用更多的空间。
Unicode 的使用使得在不同计算机系统和不同应用程序之间更容易地进行文本交流,因为它提供了一个标准的字符集和编码方案。
常用汉字的Unicode码表

包含汉字:的一是了我不人在他有这个上们来到时大地为子中你说生国年着就那和要她出也得里后自以会家可下而过天去能对小多然于心学么之都好看起发当没成只如事把还用第样道想作种开美总从无情己面最女但现前些所同日手又行意动方期它头经长儿回位分爱老因很给名法间斯知世什两次使身者被高已亲其进此话常与活正感见明问力理尔点文几定本公特做外孩相西果走将月十实向声车全信重三机工物气每并别真打太新比才便夫再书部水像眼等体却加电主界门利海受听表德少克代员许稜先口由死安写性马光白或住难望教命花结乐色更拉东神记处让母父应直字场平报友关放至张认接告入笑内英军候民岁往何度山觉路带万男边风解叫任金快原吃妈变通师立象数四失满战远格士音轻目条呢病始达深完今提求清王化空业思切怎非找片罗钱紶吗语元喜曾离飞科言干流欢约各即指合反题必该论交终林请医晚制球决窢传画保读运及则房早院量苦火布品近坐产答星精视五连司巴奇管类未朋且婚台夜青北队久乎越观落尽形影红爸百令周吧识步希亚术留市半热送兴造谈容极随演收首根讲整式取照办强石古华諣拿计您装似足双妻尼转诉米称丽客南领节衣站黑刻统断福城故历惊脸选包紧争另建维绝树系伤示愿持千史谁准联妇纪基买志静阿诗独复痛消社算义竟确酒需单治卡幸兰念举仅钟怕共毛句息功官待究跟穿室易游程号居考突皮哪费倒价图具刚脑永歌响商礼细专黄块脚味灵改据般破引食仍存众注笔甚某沉血备习校默务土微娘须试怀料调广蜖苏显赛查密议底列富梦错座参八除跑亮假印设线温虽掉京初养香停际致阳纸李纳验助激够严证帝饭忘趣支春集丈木研班普导顿睡展跳获艺六波察群皇段急庭创区奥器谢弟店否害草排背止组州朝封睛板角况曲馆育忙质河续哥呼若推境遇雨标姐充围案伦护冷警贝著雪索剧啊船险烟依斗值帮汉慢佛肯闻唱沙局伯族低玩资屋击速顾泪洲团圣旁堂兵七露园牛哭旅街劳型烈姑陈莫鱼异抱宝权鲁简态级票怪寻杀律胜份汽右洋范床舞秘午登楼贵吸责例追较职属渐左录丝牙党继托赶章智冲叶胡吉卖坚喝肉遗救修松临藏担戏善卫药悲敢靠伊村戴词森耳差短祖云规窗散迷油旧适乡架恩投弹铁博雷府压超负勒杂醒洗采毫嘴毕九冰既状乱景席珍童顶派素脱农疑练野按犯拍征坏骨余承置臓彩灯巨琴免环姆暗换技翻束增忍餐洛塞缺忆判欧层付阵玛批岛项狗休懂武革良恶恋委拥娜妙探呀营退摇弄桌熟诺宣银势奖宫忽套康供优课鸟喊降夏困刘罪亡鞋健模败伴守挥鲜财孤枪禁恐伙杰迹妹藸遍盖副坦牌江顺秋萨菜划授归浪听凡预奶雄升碃编典袋莱含盛济蒙棋端腿招释介烧误unicode 编码\u7684\u4e00\u662f\u4e86\u6211\u4e0d\u4eba\u5728\u4ed6\u6709\u8fd9\u4 e2a\u4e0a\u4eec\u6765\u5230\u65f6\u5927\u5730\u4e3a\u5b50\u4e2d\u4f60\u8bf4\u751f\u56fd\u5 e74\u7740\u5c31\u90a3\u548c\u8981\u5979\u51fa\u4e5f\u5f97\u91cc\u540e\u81ea\u4ee5\u4f1a\u5 bb6\u53ef\u4e0b\u800c\u8fc7\u5929\u53bb\u80fd\u5bf9\u5c0f\u591a\u7136\u4e8e\u5fc3\u5b66\u4 e48\u4e4b\u90fd\u597d\u770b\u8d77\u53d1\u5f53\u6ca1\u6210\u53ea\u5982\u4e8b\u628a\u8fd8\u7 528\u7b2c\u6837\u9053\u60f3\u4f5c\u79cd\u5f00\u7f8e\u603b\u4ece\u65e0\u60c5\u5df1\u9762\u6 700\u5973\u4f46\u73b0\u524d\u4e9b\u6240\u540c\u65e5\u624b\u53c8\u884c\u610f\u52a8\u65b9\u6 71f\u5b83\u5934\u7ecf\u957f\u513f\u56de\u4f4d\u5206\u7231\u8001\u56e0\u5f88\u7ed9\u540d\u6 cd5\u95f4\u65af\u77e5\u4e16\u4ec0\u4e24\u6b21\u4f7f\u8eab\u8005\u88ab\u9ad8\u5df2\u4eb2\u5 176\u8fdb\u6b64\u8bdd\u5e38\u4e0e\u6d3b\u6b63\u611f\u89c1\u660e\u95ee\u529b\u7406\u5c14\u7 0b9\u6587\u51e0\u5b9a\u672c\u516c\u7279\u505a\u5916\u5b69\u76f8\u897f\u679c\u8d70\u5c06\u6 708\u5341\u5b9e\u5411\u58f0\u8f66\u5168\u4fe1\u91cd\u4e09\u673a\u5de5\u7269\u6c14\u6bcf\u5 e76\u522b\u771f\u6253\u592a\u65b0\u6bd4\u624d\u4fbf\u592b\u518d\u4e66\u90e8\u6c34\u50cf\u7 73c\u7b49\u4f53\u5374\u52a0\u7535\u4e3b\u754c\u95e8\u5229\u6d77\u53d7\u542c\u8868\u5fb7\u5 c11\u514b\u4ee3\u5458\u8bb8\u7a1c\u5148\u53e3\u7531\u6b7b\u5b89\u5199\u6027\u9a6c\u5149\u7 67d\u6216\u4f4f\u96be\u671b\u6559\u547d\u82b1\u7ed3\u4e50\u8272\u66f4\u62c9\u4e1c\u795e\u8 bb0\u5904\u8ba9\u6bcd\u7236\u5e94\u76f4\u5b57\u573a\u5e73\u62a5\u53cb\u5173\u653e\u81f3\u5 f20\u8ba4\u63a5\u544a\u5165\u7b11\u5185\u82f1\u519b\u5019\u6c11\u5c81\u5f80\u4f55\u5ea6\u5 c71\u89c9\u8def\u5e26\u4e07\u7537\u8fb9\u98ce\u89e3\u53eb\u4efb\u91d1\u5feb\u539f\u5403\u5 988\u53d8\u901a\u5e08\u7acb\u8c61\u6570\u56db\u5931\u6ee1\u6218\u8fdc\u683c\u58eb\u97f3\u8 f7b\u76ee\u6761\u5462\u75c5\u59cb\u8fbe\u6df1\u5b8c\u4eca\u63d0\u6c42\u6e05\u738b\u5316\u7 a7a\u4e1a\u601d\u5207\u600e\u975e\u627e\u7247\u7f57\u94b1\u7d36\u5417\u8bed\u5143\u559c\u6 6fe\u79bb\u98de\u79d1\u8a00\u5e72\u6d41\u6b22\u7ea6\u5404\u5373\u6307\u5408\u53cd\u9898\u5 fc5\u8be5\u8bba\u4ea4\u7ec8\u6797\u8bf7\u533b\u665a\u5236\u7403\u51b3\u7aa2\u4f20\u753b\u4 fdd\u8bfb\u8fd0\u53ca\u5219\u623f\u65e9\u9662\u91cf\u82e6\u706b\u5e03\u54c1\u8fd1\u5750\u4 ea7\u7b54\u661f\u7cbe\u89c6\u4e94\u8fde\u53f8\u5df4\u5947\u7ba1\u7c7b\u672a\u670b\u4e14\u5 a5a\u53f0\u591c\u9752\u5317\u961f\u4e45\u4e4e\u8d8a\u89c2\u843d\u5c3d\u5f62\u5f71\u7ea2\u7 238\u767e\u4ee4\u5468\u5427\u8bc6\u6b65\u5e0c\u4e9a\u672f\u7559\u5e02\u534a\u70ed\u9001\u5 174\u9020\u8c08\u5bb9\u6781\u968f\u6f14\u6536\u9996\u6839\u8bb2\u6574\u5f0f\u53d6\u7167\u5 29e\u5f3a\u77f3\u53e4\u534e\u8ae3\u62ff\u8ba1\u60a8\u88c5\u4f3c\u8db3\u53cc\u59bb\u5c3c\u8 f6c\u8bc9\u7c73\u79f0\u4e3d\u5ba2\u5357\u9886\u8282\u8863\u7ad9\u9ed1\u523b\u7edf\u65ad\u7 98f\u57ce\u6545\u5386\u60ca\u8138\u9009\u5305\u7d27\u4e89\u53e6\u5efa\u7ef4\u7edd\u6811\u7 cfb\u4f24\u793a\u613f\u6301\u5343\u53f2\u8c01\u51c6\u8054\u5987\u7eaa\u57fa\u4e70\u5fd7\u9 759\u963f\u8bd7\u72ec\u590d\u75db\u6d88\u793e\u7b97\u4e49\u7adf\u786e\u9152\u9700\u5355\u6 cbb\u5361\u5e78\u5170\u5ff5\u4e3e\u4ec5\u949f\u6015\u5171\u6bdb\u53e5\u606f\u529f\u5b98\u5 f85\u7a76\u8ddf\u7a7f\u5ba4\u6613\u6e38\u7a0b\u53f7\u5c45\u8003\u7a81\u76ae\u54ea\u8d39\u5 012\u4ef7\u56fe\u5177\u521a\u8111\u6c38\u6b4c\u54cd\u5546\u793c\u7ec6\u4e13\u9ec4\u5757\u8 11a\u5473\u7075\u6539\u636e\u822c\u7834\u5f15\u98df\u4ecd\u5b58\u4f17\u6ce8\u7b14\u751a\u6 7d0\u6c89\u8840\u5907\u4e60\u6821\u9ed8\u52a1\u571f\u5fae\u5a18\u987b\u8bd5\u6000\u6599\u8 c03\u5e7f\u8716\u82cf\u663e\u8d5b\u67e5\u5bc6\u8bae\u5e95\u5217\u5bcc\u68a6\u9519\u5ea7\u5 3c2\u516b\u9664\u8dd1\u4eae\u5047\u5370\u8bbe\u7ebf\u6e29\u867d\u6389\u4eac\u521d\u517b\u9 999\u505c\u9645\u81f4\u9633\u7eb8\u674e\u7eb3\u9a8c\u52a9\u6fc0\u591f\u4e25\u8bc1\u5e1d\u9 96d\u5fd8\u8da3\u652f\u6625\u96c6\u4e08\u6728\u7814\u73ed\u666e\u5bfc\u987f\u7761\u5c55\u8 df3\u83b7\u827a\u516d\u6ce2\u5bdf\u7fa4\u7687\u6bb5\u6025\u5ead\u521b\u533a\u5965\u5668\u8 c22\u5f1f\u5e97\u5426\u5bb3\u8349\u6392\u80cc\u6b62\u7ec4\u5dde\u671d\u5c01\u775b\u677f\u8 9d2\u51b5\u66f2\u9986\u80b2\u5fd9\u8d28\u6cb3\u7eed\u54e5\u547c\u82e5\u63a8\u5883\u9047\u9 6e8\u6807\u59d0\u5145\u56f4\u6848\u4f26\u62a4\u51b7\u8b66\u8d1d\u8457\u96ea\u7d22\u5267\u5 54a\u8239\u9669\u70df\u4f9d\u6597\u503c\u5e2e\u6c49\u6162\u4f5b\u80af\u95fb\u5531\u6c99\u5 c40\u4f2f\u65cf\u4f4e\u73a9\u8d44\u5c4b\u51fb\u901f\u987e\u6cea\u6d32\u56e2\u5723\u65c1\u5 802\u5175\u4e03\u9732\u56ed\u725b\u54ed\u65c5\u8857\u52b3\u578b\u70c8\u59d1\u9648\u83ab\u9 c7c\u5f02\u62b1\u5b9d\u6743\u9c81\u7b80\u6001\u7ea7\u7968\u602a\u5bfb\u6740\u5f8b\u80dc\u4 efd\u6c7d\u53f3\u6d0b\u8303\u5e8a\u821e\u79d8\u5348\u767b\u697c\u8d35\u5438\u8d23\u4f8b\u8 ffd\u8f83\u804c\u5c5e\u6e10\u5de6\u5f55\u4e1d\u7259\u515a\u7ee7\u6258\u8d76\u7ae0\u667a\u5 1b2\u53f6\u80e1\u5409\u5356\u575a\u559d\u8089\u9057\u6551\u4fee\u677e\u4e34\u85cf\u62c5\u6 20f\u5584\u536b\u836f\u60b2\u6562\u9760\u4f0a\u6751\u6234\u8bcd\u68ee\u8033\u5dee\u77ed\u7 956\u4e91\u89c4\u7a97\u6563\u8ff7\u6cb9\u65e7\u9002\u4e61\u67b6\u6069\u6295\u5f39\u94c1\u5 35a\u96f7\u5e9c\u538b\u8d85\u8d1f\u52d2\u6742\u9192\u6d17\u91c7\u6beb\u5634\u6bd5\u4e5d\u5 1b0\u65e2\u72b6\u4e71\u666f\u5e2d\u73cd\u7ae5\u9876\u6d3e\u7d20\u8131\u519c\u7591\u7ec3\u9 1ce\u6309\u72af\u62cd\u5f81\u574f\u9aa8\u4f59\u627f\u7f6e\u81d3\u5f69\u706f\u5de8\u7434\u5 14d\u73af\u59c6\u6697\u6362\u6280\u7ffb\u675f\u589e\u5fcd\u9910\u6d1b\u585e\u7f3a\u5fc6\u5 224\u6b27\u5c42\u4ed8\u9635\u739b\u6279\u5c9b\u9879\u72d7\u4f11\u61c2\u6b66\u9769\u826f\u6 076\u604b\u59d4\u62e5\u5a1c\u5999\u63a2\u5440\u8425\u9000\u6447\u5f04\u684c\u719f\u8bfa\u5 ba3\u94f6\u52bf\u5956\u5bab\u5ffd\u5957\u5eb7\u4f9b\u4f18\u8bfe\u9e1f\u558a\u964d\u590f\u5 6f0\u5218\u7f6a\u4ea1\u978b\u5065\u6a21\u8d25\u4f34\u5b88\u6325\u9c9c\u8d22\u5b64\u67aa\u7 981\u6050\u4f19\u6770\u8ff9\u59b9\u85f8\u904d\u76d6\u526f\u5766\u724c\u6c5f\u987a\u79cb\u8 428\u83dc\u5212\u6388\u5f52\u6d6a\u542c\u51e1\u9884\u5976\u96c4\u5347\u7883\u7f16\u5178\u8 88b\u83b1\u542b\u76db\u6d4e\u8499\u68cb\u7aef\u817f\u62db\u91ca\u4ecb\u70e7\u8befUnicode CJK 的范围分布在多个区段中,u4e00~u9fff是整个Unicode 中区块表,带有CJK 的区块名中都拥有汉字。
Unicode汉字和英文编码范围

Unicode汉字和英文编码范围2008年10月26日星期日 20:38中文的unicode码的范围4e00-9fa5如果是英文asc,高自己是0x001)标准CJK文字/Public/UNIDATA/Unihan.htmlCode point range Block name ReleaseU+3400..U+4DB5 CJK Unified Ideographs Extension A 3.0U+4E00..U+9FA5 CJK Unified Ideographs 1.1U+9FA6..U+9FBB CJK Unified Ideographs 4.1U+F900..U+FA2D CJK Compatibility Ideographs 1.1U+FA30..U+FA6A CJK Compatibility Ideographs 3.2U+FA70..U+FAD9 CJK Compatibility Ideographs 4.1U+20000..U+2A6D6 CJK Unified Ideographs Extension B 3.1U+2F800..U+2FA1D CJK Compatibility Supplement 3.12)全角ASCII、全角中英文标点、半宽片假名、半宽平假名、半宽韩文字母:FF00-FFEF/charts/PDF/UFF00.pdf3)CJK部首补充:2E80-2EFF/charts/PDF/U2E80.pdf4)CJK笔划:31C0-31EF/charts/PDF/U31C0.pdf5)康熙部首:2F00-2FDF/charts/PDF/U2F00.pdf6)汉字结构描述字符:2FF0-2FFF/charts/PDF/U2FF0.pdf7)注音符号:3100-312F/charts/PDF/U3100.pdf8)注音符号(闽南语、客家语扩展):31A0-31BF/charts/PDF/U31A0.pdf9)日文平假名:3040-309F/charts/PDF/U3040.pdf10)日文片假名:30A0-30FF/charts/PDF/U30A0.pdf11)日文片假名拼音扩展:31F0-31FF/charts/PDF/U31F0.pdf12)韩文拼音:AC00-D7AF/charts/PDF/UAC00.pdf13)韩文字母:1100-11FF/charts/PDF/U1100.pdf14)韩文兼容字母:3130-318F/charts/PDF/U3130.pdf15)太玄经符号:1D300-1D35F/charts/PDF/U1D300.pdf16)易经六十四卦象:4DC0-4DFF/charts/PDF/U4DC0.pdf17)彝文音节:A000-A48F/charts/PDF/UA000.pdf18)彝文部首:A490-A4CF/charts/PDF/UA490.pdf19)盲文符号:2800-28FF/charts/PDF/U2800.pdf20)CJK字母及月份:3200-32FF/charts/PDF/U3200.pdf21)CJK特殊符号(日期合并):3300-33FF /charts/PDF/U3300.pdf22)装饰符号(非CJK专用):2700-27BF/charts/PDF/U2700.pdf23)杂项符号(非CJK专用):2600-26FF/charts/PDF/U2600.pdfUnicode字符编码分布表――语言文字类编码分布表――标点符号类。
汉字对应的数字代码 别

汉字对应的数字代码别汉字对应的数字代码,主要指的是Unicode码(统一码),是计算机标准化组织(ISO)为了解决文字字符的字符编码问题而制定的一套编码方案。
Unicode码使用16位编码,可以表示最多65536个字符。
在Unicode码中,汉字的编码范围为4E00-9FFF,共有20992个字符。
每个字符都有一个独立的数字代码。
以简体中文汉字为例,以下是部分汉字及其对应的Unicode码列表:汉字:一,Unicode码:4E00汉字:二,Unicode码:4E8C汉字:三,Unicode码:4E09汉字:四,Unicode码:56DB汉字:五,Unicode码:4E94汉字:六,Unicode码:516D汉字:七,Unicode码:4E03汉字:八,Unicode码:516B汉字:九,Unicode码:4E5D汉字:十,Unicode码:5341以上仅为部分汉字的Unicode码示例,每个汉字都有一个唯一的Unicode码。
这个编码方案使得在不同的计算机系统和软件中,汉字能够正确地进行输入、存储和显示。
Unicode码的出现,使得在计算机中处理含有不同文字字符的文本更加容易和便捷。
它使得不同语言、不同字体的文字能够在计算机上进行互操作。
除了Unicode码以外,还有其他的汉字编码方案,比如GBK (国标码),它是在Unicode码基础上进行扩展的编码方案,包含了大部分汉字字符。
需要注意的是,汉字对应的数字代码仅仅是一种字符编码方案,它只是一种抽象的概念。
在实际应用中,为了实现汉字的输入、存储和显示,还需要具体的输入法、操作系统和字库支持。
总之,汉字对应的数字代码主要指的是Unicode码,它是一种统一的字符编码方案,能够准确地表示汉字和其他字符。
Unicode码的出现极大地简化了计算机中处理文字字符的工作,使得不同语言、不同字体的文字能够在计算机上互操作。
Unicode(统一码、万国码、单一码)

Unicode(统⼀码、万国码、单⼀码)Unicode(统⼀码、万国码、单⼀码)是⼀种在计算机上使⽤的字符编码。
它为每种语⾔中的每个字符设定了统⼀并且唯⼀的⼆进制编码,以满⾜跨语⾔、跨平台进⾏⽂本转换、处理的要求。
1990年开始研发,1994年正式公布。
随着计算机⼯作能⼒的增强,Unicode也在⾯世以来的⼗多年⾥得到普及。
Unicode****的编码和实现⼤概来说,Unicode编码系统可分为编码⽅式和实现⽅式两个层次。
1.编码⽅式Unicode的编码⽅式与ISO10646的通⽤字元集(亦称[通⽤字符集])(Universal Character Set,UCS)概念相对应,⽬前的⽤于实⽤的Unicode版本对应于UCS-2,使⽤16位的编码空间,也就是每个字符占⽤2个字节。
统⼀字符编码标准是⼀种⼗六位的字符编码标准,⽽ASCII则是七位编码,只适⽤于英⽂。
另有西欧国家所⽤的ISO Latin-1⼋位编码。
使⽤Unicode的好处就是⽤⼀个字符集就可解决所有现今世界上的可书写语⾔。
Unicode共有2^16即65536个编码,其中有近39000种已被定义完成,⽽中国字就占了21000种!上述16位Unicode字符构成基本多⽂种平⾯(Basic Multilingual Plane,简称(BMP)。
最新(但未实际⼴泛使⽤)的Unicode版本定义了16个辅助平⾯,两者合起来⾄少需要占据21位的编码空间,⽐3字节略少。
但事实上辅助平⾯字符仍然占⽤4字节编码空间,与UCS-4保持⼀致。
未来版本会扩充到ISO10646-1实现级别3,即涵盖UCS-4的所有字符。
UCS-4是⼀个更⼤的尚未填充完全的31位字符集,加上恒为0的⾸位,共需占据32位,即4字节。
理论上最多能表⽰2^31个字符,完全可以涵盖⼀切语⾔所⽤的符号。
BMP字符的Unicode编码表⽰为U+hhhh,其中每个h代表⼀个⼗六进制数位。
与UCS-2编码完全相同。
tab unicode码的字符

要说明在计算机编程中,tab键输入的是Unicode码为“\t”的字符,它通常用于在文本中插入水平制表符,使文本在显示时呈现出等宽的格式。
在不同的编程语言和编辑器中,tab键的行为可能会有所不同,有些编辑器会将tab键转换为一定数量的空格,而有些则会将其直接显示为制表符。
在编程时需要注意不同情况下tab键的表现,以避免出现格式混乱的情况。
要介绍Unicode码是一种全球通用的字符编码标准,它为世界上大多数的字符集提供了一个独一无二的编号。
其中,“\t”表示水平制表符,是Unicode码的一种特殊字符,用于在文本中进行排版和格式化。
在计算机编程中,水平制表符通常用来对齐文本和数据,使其在输出时呈现出整齐的结构。
在很多编程语言中,tab字符都被用作语法规则和代码风格的一部分,在编写程序时,正确理解和使用tab字符是非常重要的。
另外,要提及在文本处理和编辑中,使用tab键输入的制表符常常用于创建表格和对齐文本。
通过使用tab键输入的制表符,可以使文本中的数据和内容按照一定的格式对齐,使其更加易于阅读和理解。
然而,一些编辑器和程序对tab键输入的制表符的处理机制不尽相同,有些会将其直接显示为制表符,有些则会将其转换为一定数量的空格。
在编辑和处理文本时,需要注意不同编辑器和程序对tab字符的处理方法,以保持文本的格式和布局。
可以指出在实际应用中,对于Unicode码的字符输入和处理,需要根据具体的需求和情况进行调整和处理。
在编程中,要根据所用的编程语言和编辑器的特点来合理地使用tab字符,确保文本和代码的清晰和易读。
在文本处理和编辑中,也要注意不同编辑器对tab字符的处理方式,以保持文本的格式和布局。
通过对tab键输入的Unicode码字符进行正确的理解和使用,可以更好地进行文本和编程工作,提高工作效率和质量。
针对Unicode码字符的使用,特别是tab键输入的制表符,在不同的环境和应用中可能会存在一些问题和挑战。
unicode编码规则

unicode编码规则摘要:一、Unicode 编码简介1.Unicode 的定义和作用2.Unicode 的发展历程二、Unicode 编码规则1.编码方式与字符集2.编码的基本原则3.编码的实现方式a.字节编码b.字符编码c.变长编码三、Unicode 字符的编码1.基本多文种平面(BMP)2.辅助平面(Supplementary Plane)3.统一码的兼容性与实现四、Unicode 编码的应用1.计算机系统中的Unicode 编码2.网络通信中的Unicode 编码3.移动设备中的Unicode 编码五、我国对Unicode 编码的贡献1.参与Unicode 制定2.我国主导的CJK 统一汉字编码正文:Unicode 编码规则是一种用于表示世界上所有字符的标准编码方式,它的出现解决了不同国家和地区字符编码不统一的问题,使得全球范围内的文本交流成为可能。
Unicode 编码自1991 年开始制定,至今已经经历了多个版本。
它的发展历程反映了计算机技术的发展,也体现了人们对全球字符编码统一的不断追求。
Unicode 编码规则主要包括编码方式与字符集,编码的基本原则,编码的实现方式等。
其中,编码方式与字符集规定了Unicode 可以表示的字符范围,编码的基本原则确定了编码的逻辑关系,编码的实现方式则决定了如何在计算机中实际存储和传输Unicode 字符。
在Unicode 编码中,字符的编码分为基本多文种平面(BMP)和辅助平面(Supplementary Plane)。
BMP 包含了所有常用的字符,而辅助平面则包含了较为罕见的字符。
这样的设计使得常用的字符可以被高效地编码和传输,同时也有足够的空间来容纳未来的字符需求。
Unicode 编码在我国得到了广泛的应用。
在计算机系统中,Unicode 编码被广泛应用于操作系统、编程语言、文本处理软件等。
在网络通信中,Unicode 编码也被广泛应用于网页、电子邮件等。
汉字对应的数字代码 别

汉字对应的数字代码别汉字对应的数字代码是指在计算机系统中,每个汉字都有一个唯一的编号来表示。
这个编号被称为Unicode码。
Unicode是一种国际字符集,用于表示世界上所有的字符,包括各种文字、符号和表情符号等。
它为每个字符分配了一个唯一的数字代码,称为码点。
Unicode码点的范围从U+0000到U+10FFFF,共计1,114,112个码点。
Unicode码点的表示方式通常以U+开头,后面跟着一个4位或更多位的十六进制数。
例如,汉字"中"的Unicode码点为U+4E2D。
Unicode码点的使用使得计算机可以在不同的操作系统和程序中准确地识别和显示各种字符。
在计算机编程和文字处理中,Unicode码点常常用于表示字符,进行字符输入和输出等操作。
对于常用汉字,Unicode码点通常可以通过快捷方式进行输入,如"中"字的快捷输入方式为"U-56FD"。
在常用的操作系统和文字处理软件中,都提供了输入Unicode码点的方法。
在计算机编程中,Unicode码点通常用转义序列的方式表示。
转义序列以"\u"或"\U"开头,后面跟着对应的十六进制数。
例如,汉字"中"的转义序列为"\u4E2D"。
除了Unicode码点外,还存在一种常用的表示汉字的数字代码,称为GB码或GB2312码。
这是中国国家标准GB2312-80中规定的一种对汉字进行编码的方法。
GB码将汉字编码成一个两字节的数字代码,其中第一个字节表示区号,第二个字节表示位号。
例如,汉字"中"的GB码为B0A1。
GB码的使用主要针对汉字,对其他字符的编码则不具备优势。
因此,随着Unicode的普及,GB码的使用逐渐减少。
总结起来,汉字对应的数字代码主要有Unicode码和GB码两种。
Unicode码是全球字符集的统一编码标准,适用范围广泛,用于计算机系统中表示和处理所有的字符。
中文unicode范围

中文unicode范围中文unicode范围,指的是中文unicode编码所规定的范围。
在计算机语言中,unicode编码是指机器码可以识别的文本编码。
它是一种用于存储和传输字符的国际标准,用于实现跨计算机平台和应用程序的文本传输。
由于unicode编码标准整合了世界上所有有文字的语言,中文unicode编码也受其规范。
中文unicode编码的范围主要包含三部分。
首先,以U+4E00为起始,中文unicode编码的最小范围是U+9FFF;其次,以U+3400为起始,中文unicode编码的最大范围是U+4DBF;最后,以U+20000为起始,中文unicode编码的最大范围是U+2A6DF。
实际上,中文unicode编码的范围里面包含了现代汉语的大量汉字,以及近现代汉语的一些汉字。
换句话说,中文unicode编码的最大范围可以用来表示中国所有的现代和近现代汉字。
因此,任何一个在中文unicode编码范围内的汉字都可以用unicode编码的形式来表示。
除了汉字外,中文unicode编码的范围中还有很多与文字有关的符号,如标点符号、箭头符号、图形符号、表格符号、数学符号等,它们都可以使用unicode编码来表示。
因此,不仅仅汉字,许多文字短语也可以使用unicode编码来表示。
许多应用程序都使用中文unicode编码来实现字符的识别和显示。
主流的操作系统,如Windows、Mac OS、Linux,都使用中文unicode 编码来存储和显示文本,这样就可以实现跨平台的文本传输。
此外,由于unicode编码的通用性,它也被广泛用于网络和其它信息处理应用中,如电子邮件、网页编辑等。
总的来说,中文unicode编码的范围为U+4E00至U+9FFF,U+3400至U+4DBF,以及U+20000至U+2A6DF,它们可以用来表示中国所有现代和近现代汉字以及与之相关的标点符号、图形符号、表格符号和数学符号等。
中文unicode范围

中文unicode范围Unicode是一门用于编码世界上众多语言文字的统一编码系统,由联合国教科文组织和国际标准化组织制定。
自1990年以来,它已经逐渐成为跨平台软件和硬件的基础。
2003年,它被扩展为可识别十六进制码,以支持更多的语言字符,其中包括中文字符。
中文Unicode编码的范围从0000-007F,也就是第一个字节的范围,到FFFF,在普通编码格式中表示中文字符,包括汉字、偏旁、部首和常用象形符号等。
这里的字节表示这些字符的一个字符代码,是一组16位或32位数字,由几个可识别的16进制字符组成。
每一个Unicode字符都有一个独特的码值,而每一个码值都对应一个中文字符,用来表示语言的全部种类。
因此,Unicode标准对中文字符的编码范围较大,可以支持世界上大部分的中文文字。
此外,字符编码还可以被称为“字体”,这种编码是按照某种标准来编写文本内容,可以用来表示各种文字,而Unicode标准则将各种语言文字视为一种标准,被称为“Unicode字体”,它能够兼容各种语言文字,包括中文字符。
中文Unicode范围的扩展非常广泛。
UCS-2是Unicode标准的第一个版本,主要用于存储简体中文字符,它的编码范围从0000-FFFF,可识别超过60多种中文文字;而UCS-4则是Unicode标准的第二个版本,被广泛应用于存储更多的中文文字,它的编码范围从0000 - FFFF FFFF,可识别超过6000多种汉字和表意文字。
任何一种语言在编码的时候,都需要遵循Unicode标准,而中文尤为如此,因为它所包含的文字数量远远超过其它语言,所以Unicode 在中文字符范围上对应的编码范围也要比其它语言更广泛。
虽然中文字符占用的空间比较大,但是如果正确使用Unicode编码,可以有效避免文件格式的混乱,处理中文文字也会变得更加容易,给使用者带来更多便利。
因此,国际标准化组织和联合国教科文组织一直在不断推进Unicode的发展,以实现对世界上绝大部分语言文字的兼容,使用者也可以根据自己的需求选择不同的Unicode标准,以达到最佳的文字输入和文件兼容效果。
字符的表示方法

字符的表示方法字符是计算机中最基本的信息单位,也是人们日常生活中最常见的符号之一。
在计算机中,字符的表示方法有很多种,每种方法都有其特点和适用范围。
本文将介绍几种常见的字符表示方法。
1. ASCII码ASCII码是一种用于表示字符的标准编码方法,它使用7位二进制数来表示128个字符。
ASCII码包括了英文字母、数字、标点符号以及一些控制字符。
每个字符都对应着一个唯一的ASCII码。
例如,字母"A"的ASCII码为65,字母"a"的ASCII码为97。
2. UnicodeUnicode是一种用于表示字符的国际标准编码方法,它使用16位二进制数来表示字符。
Unicode可以表示世界上几乎所有的字符,包括各种文字、符号和表情符号。
Unicode的编码范围非常广泛,目前已经定义了超过13万个字符。
例如,中文字符"中"的Unicode编码为U+4E2D。
3. UTF-8UTF-8是一种用于在计算机存储和传输Unicode字符的编码方法。
UTF-8使用变长编码,可以根据字符的不同范围使用不同长度的字节来表示字符。
UTF-8兼容ASCII码,可以表示任何Unicode字符。
UTF-8编码的特点是节省存储空间,适合在互联网上传输文本数据。
4. GB2312GB2312是中国国家标准局于1980年推出的一种汉字编码标准。
它使用两个字节来表示汉字字符,共收录了6763个常用汉字和682个非汉字字符。
GB2312编码主要用于简体中文环境,是早期计算机系统中常用的字符编码方法。
5. Big5Big5是台湾地区常用的汉字编码标准,它使用两个字节来表示汉字字符,收录了13053个汉字和符号。
Big5编码主要用于繁体中文环境,是早期计算机系统中常用的字符编码方法。
总结起来,字符的表示方法有很多种,每种方法都有其特点和适用范围。
ASCII码适用于英文字符和一些常用符号的表示;Unicode 可以表示世界上几乎所有的字符;UTF-8是一种在计算机存储和传输Unicode字符的编码方法;GB2312和Big5则是中文环境下常用的汉字编码方法。
单字符编码

单字符编码1. 简介单字符编码(Unicode)是用于表示字符的标准编码系统。
它为全球各种文字和符号提供了统一的编码,使得不同的计算机系统之间可以正确地交换和处理文本。
2. ASCII编码ASCII(American Standard Code for Information Interchange)是最早的单字符编码系统之一。
它使用7位二进制数(共128个编码)来表示字母、数字、标点符号等基本字符。
ASCII编码在计算机的早期应用中起到了重要的作用,但由于只能表示有限的字符范围,无法满足全球多语言的需求。
3. Unicode编码的出现随着计算机技术的发展和全球信息交流的增加,人们对于更广泛的字符集的需求也日益增长。
为了解决ASCII编码的局限性,Unicode编码应运而生。
Unicode编码使用16位二进制数(共65,536个编码)来表示字符,可以覆盖全球范围内的绝大部分文字和符号。
4. Unicode编码的组成Unicode编码的基本单位是代码点(Code Point),每个代码点对应一个字符。
Unicode使用十六进制数来表示代码点,通常以U+开头。
例如,英文字母”A”的Unicode代码点为U+0041,汉字”中”的代码点为U+4E2D。
5. Unicode编码的平面Unicode将所有的代码点划分为17个平面(Plane),每个平面包含65,536个代码点。
第一个平面(Plane 0)被称为基本多文种平面(BMP),包含了最常用的字符。
其他平面则包含了一些较为特殊或较少使用的字符。
6. UTF-8编码UTF-8(Unicode Transformation Format-8)是一种可变长度的Unicode编码格式。
它可以根据字符的代码点来动态分配字节长度,以便更高效地表示文本。
UTF-8编码在互联网应用中非常常见,几乎支持了所有的字符。
7. UTF-16编码UTF-16是一种固定长度的Unicode编码格式,每个字符都用16位二进制数表示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。
它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
1990年开始研发,1994年正式公布。
随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。
Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表。
2006年6月的最新版本的 Unicode 是 2005年3月31日推出的Unicode 4.1.0 。
另外,5.0 Beta已于2005年12月12日推出,以供各会员评价。
大概来说,Unicode 编码系统可分为编码方式和实现方式两个层次。
1.编码方式Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。
码位就是可以分配给字符的数字。
UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
Unicode字符集可以简写为UCS(Unicode Character Set)。
早期的Unicode 标准有UCS-2、UCS-4的说法。
UCS-2用两个字节编码,UCS-4用4个字节编码。
UCS-4根据最高位为0的最高字节分成2^7=128个group。
每个group再根据次高字节分为256个平面(plane)。
每个平面根据第3个字节分为256行(row),每行有256个码位(cell)。
group 0的平面0被称作BMP(Basic Multilingual Plane)。
将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。
每个平面有2^16=65536个码位。
Unicode计划使用了17个平面,一共有17*65536=1114112个码位。
在Unicode 5.0.0版本中,已定义的码位只有238605个,分布在平面0、平面1、平面2、平面14、平面15、平面16。
其中平面15和平面16上只是定义了两个各占65534个码位的专用区(Private Use Area),分别是0xF0000-0xFFFFD和0x100000-0x10FFFD。
所谓专用区,就是保留给大家放自定义字符的区域,可以简写为PUA。
平面0也有一个专用区:0xE000-0xF8FF,有6400个码位。
平面0的0xD800-0xDFFF,共2048个码位,是一个被称作代理区(Surrogate)的特殊区域。
代理区的目的用两个UTF-16字符表示BMP以外的字符。
在介绍UTF-16编码时会介绍。
如前所述在Unicode 5.0.0版本中,238605-65534*2-6400-2408=99089。
余下的99089个已定义码位分布在平面0、平面1、平面2和平面14上,它们对应着Unicode目前定义的99089个字符,其中包括71226个汉字。
平面0、平面1、平面2和平面14上分别定义了52080、3419、43253和337个字符。
平面2的43253个字符都是汉字。
平面0上定义了27973个汉字。
2.实现方式在Unicode中:汉字“字”对应的数字是23383。
在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。
UTF 是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。
例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16编码DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。
UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。
“汉字”的UTF-8编码需要6个字节。
“汉字”的UTF-16编码需要两个WORD,大小是4个字节。
“汉字”的UTF-32编码需要两个DWORD,大小是8个字节。
根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。
下面介绍UTF-8、UTF-16、UTF-32、字节序和BOM。
UTF-8UTF-8以字节为单位对Unicode进行编码。
从Unicode到UTF-8的编码方式如下:Unicode编码(16进制) ║UTF-8 字节流(二进制)000000 - 00007F ║0xxxxxxx000080 - 0007FF ║110xxxxx 10xxxxxx000800 - 00FFFF ║1110xxxx 10xxxxxx 10xxxxxx010000 - 10FFFF ║11110xxx 10xxxxxx 10xxxxxx 10xxxxxx UTF-8的特点是对不同范围的字符使用不同长度的编码。
对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。
UTF-8编码的最大长度是4个字节。
从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。
Unicode 的最大码位0x10FFFF也只有21位。
例1:“汉”字的Unicode编码是0x6C49。
0x6C49在0x0800-0xFFFF之间,使用用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。
将0x6C49写成二进制是:0110 1100 0100 1001,用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
例2:Unicode编码0x20C30在0x010000-0x10FFFF之间,使用用4字节模板了:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。
将0x20C30写成21位二进制数字(不足21位就在前面补0):0 0010 0000 1100 0011 0000,用这个比特流依次代替模板中的x,得到:11110000 10100000 10110000 10110000,即F0 A0 B0 B0。
UTF-16UTF-16编码以16位无符号整数为单位。
我们把Unicode编码记作U。
编码规则如下:如果U<0x10000,U的UTF-16编码就是U对应的16位无符号整数(为书写简便,下文将16位无符号整数记作WORD)。
如果U≥0x10000,我们先计算U'=U-0x10000,然后将U'写成二进制形式:yyyy yyyy yyxx xxxx xxxx,U的UTF-16编码(二进制)就是:110110yyyyyyyyyy 110111xxxxxxxxxx。
为什么U'可以被写成20个二进制位?Unicode的最大码位是0x10ffff,减去0x10000后,U'的最大值是0xfffff,所以肯定可以用20个二进制位表示。
例如:Unicode编码0x20C30,减去0x10000后,得到0x10C30,写成二进制是:0001 0000 1100 0011 0000。
用前10位依次替代模板中的y,用后10位依次替代模板中的x,就得到:1101100001000011 1101110000110000,即0xD843 0xDC30。
按照上述规则,Unicode编码0x10000-0x10FFFF的UTF-16编码有两个WORD,第一个WORD的高6位是110110,第二个WORD的高6位是110111。
可见,第一个WORD的取值范围(二进制)是11011000 00000000到11011011 11111111,即0xD800-0xDBFF。
第二个WORD的取值范围(二进制)是11011100 00000000到11011111 11111111,即0xDC00-0xDFFF。
为了将一个WORD的UTF-16编码与两个WORD的UTF-16编码区分开来,Unicode编码的设计者将0xD800-0xDFFF保留下来,并称为代理区(Surrogate):D800-DB7F ║High Surrogates ║高位替代DB80-DBFF ║High Private Use Surrogates ║高位专用替代DC00-DFFF ║Low Surrogates ║低位替代高位替代就是指这个范围的码位是两个WORD的UTF-16编码的第一个WORD。
低位替代就是指这个范围的码位是两个WORD的UTF-16编码的第二个WORD。
那么,高位专用替代是什么意思?我们来解答这个问题,顺便看看怎么由UTF-16编码推导Unicode编码。
如果一个字符的UTF-16编码的第一个WORD在0xDB80到0xDBFF之间,那么它的Unicode编码在什么范围内?我们知道第二个WORD的取值范围是0xDC00-0xDFFF,所以这个字符的UTF-16编码范围应该是0xDB80 0xDC00到0xDBFF 0xDFFF。
我们将这个范围写成二进制:1101101110000000 11011100 00000000 - 1101101111111111 1101111111111111 按照编码的相反步骤,取出高低WORD的后10位,并拼在一起,得到1110 0000 0000 0000 0000 - 1111 1111 1111 1111 1111 即0xe0000-0xfffff,按照编码的相反步骤再加上0x10000,得到0xf0000-0x10ffff。
这就是UTF-16编码的第一个WORD在0xdb80到0xdbff之间的Unicode编码范围,即平面15和平面16。
因为Unicode标准将平面15和平面16都作为专用区,所以0xDB80到0xDBFF之间的保留码位被称作高位专用替代。
UTF-32UTF-32编码以32位无符号整数为单位。
Unicode的UTF-32编码就是其对应的32位无符号整数。