C++ 字符串的编码

来源:互联网 发布:布尔玛和孙悟空 知乎 编辑:程序博客网 时间:2024/06/06 00:34

C++ 字符串的编码
转载链接:https://www.cnblogs.com/akb48/p/5439154.html

windows平台  

        char 表示单字符,占用一个字节

        wchar_t 表示宽字符,占用两个字节

Linux平台   

        char 占用一个字节
        wchar_t 占用四个字节

windows平台下对于用字符串保存中文的问题,GBK和UTF8都是用char来表示,只是为了表示一个中文字符需要用到多个char。而对于UNICODE(其实应该说是UFT16),每一个字符都需要一个两个字节,也就是用wchar_t表示。

UNICODE只是一个字符集,规定了不同的字符对应于一个唯一的整数,平时所说的使用UNICODE编码其实说的是UFT16编码(顾名思义就是用16位来表示一个字符)。

UTF8、UTF16和UFT32则是基于UNICODE字符集的三种编码方式。不同之处是:对于一个字符所对应的整数,应该怎样用二进制位表示出来。对于UTF16和UTF32,不管字符对应的数字是多少,都用恒定的多字节表示,所以可以很方便的表示一个字符,但需要注意字节序问题。比较麻烦的是UFT8,对于不同的字符,可能会用到一个字节,两个字节到最多六个字节。这么做的好处是节省了空间。

在实际使用字符串保存时,因为UTF16不管什么字符,都用2个字节表示,所以可能会出现某一个字节全零的情况。例如字符‘A’编码是0x41,用UTF16表示就是0x0041。对于char表示的字符串,以0x00表示结尾,所以没有办法正确的存储此类数据,此时只能用wchar_t来保存。

UTF8编码方式如下:用1~6个字节存储一个字符,当第一个字节的首位为0时,表示这个字符只用一个字节表示(刚好与ASCII码一一对应),当用多字节表示一个字符时,首字节以连续的多个1和一个0开始,表示用多个字节。例如用3个字节是,首字节为1110xxxx,后面各字节均以10开始。

UNICODE原码(16进制) UTF8(2进制)
0000-007F 0xxxxxxx
0080-07FF 110xxxxx 10xxxxxx
0800-FFFF 1110xxxx 10xxxxxx 10xxxxxx
……

如上所示,UTF8中的‘x’就是实际表示字符编码的位。表示的最大值就是全1的情况,最小值就是少一个字节的情况下最大值加1,因为少一个字节已经可以存的下的字符,不会用多一个字节来保存。由上可知,UTF8可以直接用char类型的字符串来表示,只是用对应的解释方式来解释就可以正确显示了。

另外一种就是GBK等编码方式。这一类编码方式和UNICODE没有任何关系,是另一种字符集和编码方式的规定。使用方法可以类比于UTF8,在编码小于128时,就是ASCII,而中文的编码均大于128,用超过一个字节来表示。在平时编写的windows程序中,可以理解为如果使用了UNICODE宏,就是在用wchar_t来表示中文,使用UTF16编码,如果没有UNICODE宏,那么就是在用GBK,以char来表示中文。

windows平台下的TCHAR类型就是通过宏对char和wchar_t的封装。可根据当前平台情况选择对应的类型。_T修饰的字符串常量同理,根据是否定义的UNICODE宏,分别表示”“或L”“。

Linux平台的不同在于,wchar_t用4个字节表示,也就是UCS-4,而windows用两个字节,UCS-2。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 雪松树价格表 雪松求购信息 红雪松防腐木价格 雪松怎样繁殖 关于雪松的资料 雪松种植方法 三米雪松价格 雪松精油价格 雪松树的资料 雪松有什么特点 雪松是开花植物吗 雪松树种子价格 傲世狼尊 冬季雪松 雪里拖枪 雪莉枪 成都4p雪利枪 程雪柔txt全文在线阅读 善良美人慕柔雪全文目录 程雪柔txt全文 程雪柔 慕柔雪全篇阅读 漂亮人妇慕柔雪系列全文目录 校花程雪柔 慕容柔雪二次怀孕 雪柔挺身而进 雪柔公交txt 慕柔雪三部曲 幕柔雪一到四十集 老婆雪柔 公交车雪柔 慕柔雪怀孕后续29 程雪柔txt免费阅读 慕雪柔全文阅读 慕柔雪母亲跟乞丐结局 程雪柔txt阅读 公交轮雪柔 高雪柔被灌满 雪柔 公交车大战程雪柔阅读 铭雪冷藏展示柜 雪飞扬保鲜柜