简单几句话总结Unicode,UTF-8和UTF-16

概念

先说一说基本的概念,这包括什么是Unicode,什么是UTF-8,什么是UTF-16。

Unicode,UTF-8,UTF-16完整的说明请参考Wiki(UnicodeUTF-8UTF-16)。用比较简单的话来说就是,Unicode定义了所有可以用来表示字符的数值集合(称之为Code Point)。UTF-8和UTF-16等UTF标准定义了这些数值和字符的映射关系。

UTF-8

优势

UTF-8最大的优势是,没有字节序的概念。所以特别适合用于字符串的网络数据传输,不用考虑大小端问题。

劣势

本地字符串处理过程中,如果使用UTF-8,对于英文字符的处理没有太大的问题。一个char变量表示一个英文字符。但是对于中文等远东字符集来说,就比较坑爹了。char str[]; str[0]并不能完整表示一个汉字。UTF-8编码格式下,一个汉字需要至少3个char才能表示。这对于通过下标来操作字符串的操作来说是非常痛苦的一件事情。

另外,一个汉字需要至少3个char来表示,也让汉字在网络传输上存在劣势,占用太多流量。

UTF-16

优势

UTF-16 LE是windows上默认的Unicode编码方式,使用wchar_t表示。所有wchar_t *类型的字符串(包括硬编码在.h/.cpp里的字符串字面值),VC都自动采用UTF-16的编码(字符串字面值,literal string,存在很多坑。特别是char *类型的字面值,最终内存使用何种编码方式完全取决于当前文件的编码方式。也就是说当前文件如果是GBK编码的,那么文件里char * str = "中午",str指向的内存字符串二进制是使用GBK编码的。如果文件编码是UTF-8,那么内存是使用UTF-8编码。所以为什么一直要强调字符串应该放在资源文件里,而不是硬编码在.h/.cpp文件里!)。

UTF-16另外一个优势就是常用字符都可以使用两个个字节表示,也就是一个wchar_t(这里指Windows平台)。所以,在Windows平台上,特别适合使用wchar_t来作为字符串的存储基类型。一个wchar_t表示一个字符。操作使用非常方便。

劣势

没有统一的表示UTF-16编码的字符类型。C++98/03里对wchar_t的定义是非常宽泛的。这导致在Windows平台上,wchar_t是2字节的;在Unix-like系统上是4字节的。代码移植上,可能会遇到挑战(我没移植过,所以不确定会有什么难度,以及难度有多大)。

即使最新的C++11里已经定义除了char16_t表示UTF-16,MS的VS2013还不支持char16_t。所以目前使用char16_t还不具移植性。

据我了解,UTF-16编码和GBK编码相比,还存在一个排序的劣势。也就是说,如果要按照汉语拼音的字母顺序对汉字进行排序,GBK会得到正确的结果,而UTF-16就不行(暂时我还没这种需求,所以我没验证过,不过好像我马上就要与到这种需求了,到时候我再验证下)。

UTF-16编码字符串的网络传输,要考虑大小端的问题。

UTF-32

优势

这个优势就明显了,所有字符都是4字节,fix-length。一个wchar_t(Unix-like系统上)表示一个字符。

劣势

对于以英文为主的字符串来说,空间消耗大。

面临和上面UTF-16一样的问题。一致性,排序,网络传输。char32_t VS2013还不支持(甚至VS 14 CPT也没打算支持)。

总结

UTF-8最适合用来作为字符串网络传输的编码格式。UTF-16最适合当作本地字符串编码格式。如果定义好了网络传输协议,那么UTF-16也非常合适当作网络字符串传输的编码格式,特别是中文等远东地区字符集。比起UTF-8来说,节省流量。UTF-32没什么特殊癖好或者需求的话,暂时还用不上。

简单几句话总结Unicode,UTF-8和UTF-16

时间: 2024-10-09 01:33:01

简单几句话总结Unicode,UTF-8和UTF-16的相关文章

HTML元素title里面和js里面几句话如何换行 格式代码是如何的?

在调试代码的时候我就遇到一个问题,HTML元素title里面通常只显示一行,那我想要他换行,就是多行显示,如何实现?JS代码里面比如Alert里面又该如何换行? 经过我的一番实验 要实现这种效果有几种方法,并且非常简单: 在HTML元素中,可以使用:1.直接按"回车键"换行,代码中换行,实际中也会换行   2.用代码换行,只要在想要换行的地方输入这两个" "和" "任意中的一个都达到实现换行的效果!          在JS代码中,想要类似提示框

用七年时间造出的阿里云,如今三句话告诉你是什么

马云在2016年10月杭州云栖大会的主题演讲中只字未提"阿里云",但这并不说明阿里云不重要,而是在某种意义上说明在马云的心里,阿里云"从0到1"的阶段已经完成了. 在10月13日杭州云栖大会开幕当天,马云发表了就上一财年致股东信,信中提及阿里云承载了中国35%的网站并为之提供云计算和大数据的服务,而截至2016年3月31日的阿里财报显示阿里云拥有超过230万用户,其中云计算付费用户达50万. 从2009年2月写下阿里云的第一段代码开始,阿里云上上下下的负责人们就一直

每一个程序员都应当了解的11句话

每一个程序员都应当了解的11句话,你最同意哪一句? 1. 技术只是解决问题的选择,而不是解决问题的根本 我们可以因为掌握了最新的 JavaScript 框架 ahem.Angular 的 IoC 容器技术或者某些编程语言甚至操作系统而欢欣雀跃,但是这些东西并不是作为程序员的我们用来解决问题的根本——它们只是用于帮助我们解决问题的简单工具. 我们必须非常谨慎,不要对某项正好喜欢或者正好很火的特定技术走火入魔.否则,我们将进入这样的思维怪圈:把掌握的那项技术比做是锤子,在思考问题时,会自然的把所有的

模式识别之相似度计量---余弦计算相似度度量关于两句话的相似度

余弦计算相似度度量 相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大. 对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度.下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度 向量空间余弦相似度(Cosine Similarity) 余弦相似度用向

很多人,被这句话害了一辈子

点击上方蓝字关注我们,夜读与你一起砥砺前行! 21君:小时候,你可听过“这孩子特聪明,就是学习不用心,他要是认真起来,学习成绩肯定好.”这句话么?是对你说的,还是对你身边的人说的?很多人都觉得这是一个夸奖,但其实给孩子这样的一个想法,其实是害了孩子.自作聪明的人,往往还没有学会正视自己与他人的努力和付出,就已经喜欢了那种轻盈获胜的姿态.为了姿态好看,他们宁可输,也不想通过努力制胜.来源:衷曲无闻(zhongquwuwen) 8:48 很多人,被这句话害了一辈子 来自21世纪经济报道   特别鸣谢

10句话立马激怒程序猿,杀伤力爆棚~

第十名:"加油!我先下班了啦~" 作为一个需求方,我提醒你不该说这样的话-- 第九名:"你造嘛,我新电脑的内存有 1 TB!" 内存和硬盘有啥区别,你造吗? 第八名:"能帮我黑 XXX 的 QQ 吗?" 不能!不能!不能! 第七名:"尽快做完,好伐?" 用邮件发这句话杀伤力更大-- 第六名:"你先大概弄一个,让我参考看看." 请问,什!么!叫!大!概?! 第五名:"帮我加 10 个功能先,明天就要

被洗脑的中国人常用的10句话

近日,有媒体归纳了被洗脑的中国人常用的10句话,值得中国人深思.  NO.1[你不能改变别人,只能改变自己]  适用人群:这句话对有一种人是管用的,那就是一天到晚只会嫌别人做的不好,似乎全天下都欠了他从来不反思自己是不是有问题的人.特别是那种试图让全世界都按照他们的方式运转的人.只可惜,越是这种人,喊"改变自己"喊得越响,他们是在要求别人改变来适应他们的固执.  奴性潜台词:改变有很多种,但是一大部分喜欢用这句话给别人洗脑的人,强调的总是让人变得柔顺的那一面.遇到了矛盾,要求你先理解体

要想混得好,这50句话你不得不读!

引导语:自己发光,不要等别人把你磨光,谁有空.有心情去认真地"磨"你呢?人生中就算没有多么光辉的印记,至少也要问心无愧,或许看似简单,可做起来没那么容易.要想混得好,下面这50句话你不得不读! 1.跌倒了,一定要爬起来--不爬起来,别人会看不起你,你自己也会失去机会. 2.像蟑螂一样活着--人如果有蟑螂的韧性,还有什么日子不能过呢? 3.靠实力,不靠派系--派系不是永远的,实力才是你能依靠一生的东西. 4.自己发光,不要等别人把你磨光--谁有空.有心情去认真地"磨"

三句话教你买对房子!买到好房子的都祝福哥三年内赚两个亿!

http://bbs.tianya.cn/post-house-482606-1.shtml 看见很多菜人花了老爸老妈一辈子的钱买了破房,哥心痛呀,做点善事,教你一下,三分钟学会买房,看了此贴买到好房的都给哥祝福一下:三年内赚两个亿! 买房很简单,就三句话,记住就行,对着这几个字去买,百分百对. 三句话总概述为:五无,六有,四基本. 四基本:透,亮,正,静. 五无:立交,工厂,医院,幅射,污柒. 六有:山,水,学校,公园,地铁,商超. 以上几条不可能全达到,但达到越多者房子越好. 再送几句买房要