曾经这个世界上,有着gb2312,gbk,latin1,utf 等各种字符集,现在,我们也能不时的看到他们的身影.

但是值得庆幸的事,时过境迁,这些主要的字符集,都已经逐渐被utf8取代.

但是我们很多新人,还是搞不清楚,unicode和utf8的关系,为啥还有utf16等问题也时常困扰着他们.

业界有一个大牛,写了一个文章:

http://huoding.com/2015/10/13/472   (Unicode and UTF-8)

然而说的也是比较细节,讲了一些查询的方法和函数. 实际操作中,可以参考

最核心的区别和问题,我列在这里:

广义的Unicode 是字符集, 是对字符的按槽放入的规范,狭义的unicode一般是指utf16,实际上也是一种编码方式

而utf8是对unicode进行变长编码的编码方式,仅仅是一种编码方式

其他编码,如gbk,gb2312,实际上既是字符集,也同时就规定了编码方式.为啥unicode和utf8存在这个不同的呢?

请看下文:

Unicode预订的编码空间大小为0x0-0x10FFFF,最多可以容纳1114112(100多万)个字符

实际上并不能使用这么多的空间,于是编码方式出现了两种,ucs-2(BMP)和ucs-4 编码方式

其中,bmp是Basic Multilingual Plane的简写.

一个字符的Unicode编码(码点)是唯一确定的,但由于不同系统平台实现方式的不同(如字节序的不同),或基于传输或节省存储空间等各种因素考
虑,Unicode的实现方式各不相同,Unicode的实现方式称为Unicode转换格式(Unicode Translation
Format,简称为UTF)

如UTF-16
UTF-16采用双字节对UCS-2字符进行编码,由于UCS-2本身也是双字节编码,故一般UTF-16编码和UCS-2编码可等同对待,但由于不同平台对字节序的理解不同,
UTF-16又分为UTF-16 BE(Big-Endian, 简写为UTF-16 BE)和UTF-16 LE(Little-Endian,简写为UTF-16 LE)两种编码方式.

UTF-16编码的优点:编码效率高,寻址快。
由于所有字符都采用双字节编码,可以快速对字符进行定位及计算,如一个文本文件,可以通过获得其文件大小/2即可计算得知包含的字符数。Java默认使用UTF-16 BE编码。

那么为什么会出现utf-8呢:
1)、和ASCII码不兼容,而且不太好移植(Not Portable)
例如:char *s=“Good ,北京”;该C语言代码采用UTF-16编码后,字节序列中间有许多’\0’,’\0’ 会被识别为字符串的终止,strlen()函数不起用了。
2)、存储空间较大,造成存储及带宽的极大浪费
极端情况下,英文存储空间会Double!
为了解决这些现实生活中遇到的问题,UTF-8编码应运而生!

言归正传,对于UTF-8
UTF-8是针对Unicode(UCS-2或UCS-4)的可变长度编码方式,是一种前缀码,它可用来编码Unicode中的任何一个字符。UTF-8
编码和ASCII码全兼容,自应用以来逐渐成为电子邮件、网页及其他存储或传送文字应用中,最优先采用的Unicode编码方式。

如果有兴趣,可以延伸阅读RFC:
http://www.rfc-editor.org/rfc/rfc3629.txt

Unicode 和 UTF-8 的关系的更多相关文章

  1. Unicode和UTF的关系

    目录结构: contents structure [+] 什么是USC UCS的编码方式 Unicode的来源 为什么需要Unicode Unicode的方式 Unicode和UTF UTF和Unic ...

  2. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  3. 字符编码:Unicode和UTF-8之间的关系

    Unicode和UTF-8之间的关系 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256 ...

  4. Unicode和UTF-8之间的关系

    作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...

  5. Unicode、UTF-8 和 ISO8859-1

    Unicode.UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文" ...

  6. Unicode 和 UTF-8 是什么关系?

    2015-10-14 10:08    评论: 9 收藏: 4 转载自: http://huoding.com/2015/10/13/472作者: 火丁笔记本文地址:https://linux.cn/ ...

  7. unicode和utf8之间的关系

    ,字符编码是计算机技术的基石,想要熟练使用计算机,懂得一点字符编码的知识,还是很有必要的. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit ...

  8. Unicode 和 UTF-8 之间的关系

    一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...

  9. ascii、unicode、utf、gb等编码详解

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这 ...

  10. Unicode 与 UTF 字符标准

    Unicode 国际字符标准(UCS)是一个字符编码系统,它被设计用来支持世界各国不同语言书面文体之间的数据交换.处理以及显示.        Unicode用两个字节表示一个字符.前127个字符与A ...

随机推荐

  1. iOS开发(OC)中的命名规范

    开小差:最近发现自己有一个经验主义的毛病,不太容易接受新的知识,这对从事技术研发的人来说不太合理,需要改之. 正文:通过读写大量代码我有自己的一套编程思路和习惯,自认为自己的编码习惯还是不错的,代码结 ...

  2. JavaScript测试工具比较: QUnit, Jasmine, and Mocha

    1. QUnit A JavaScript Unit Testing framework. QUnit is a powerful, easy-to-use JavaScript unit testi ...

  3. 初次学习shader

    Shader "Custom/Diffuse Texture" { //在shader中的位置 Properties { //着色器的属性 _MainTex ("Base ...

  4. 在web.config配置中添加xml内容

    在web.config 中添加需要的内容时, 就是在<configuration>节点内添加一个新的<configSections>元素, 在configSections元素中 ...

  5. Log4j快速使用精简版

    Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...

  6. Java Swing 第02记 标签和按钮

    JLable的常用构造器 Public JLabel() 创建无图像且其标题为空字符串的JLabel对象 Public JLabel(String text) 使用指定的字符串text(也就是标签显示 ...

  7. 利用NABCD模型进行竞争性需求分析

    微博的NABCD模型 N-Need:毫无疑问,当今的中国普通民众是有这点需求的,在上个世纪中国民众的休闲娱乐方式更多的停留在以电视传媒为主的娱乐方式,而进入21世纪以来中国民众的娱乐中心向互联网转移, ...

  8. Varnish常用相关命令工具

    varnishd启动./varnishd  -f /usr/local/varnish-3.0.2/etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1: ...

  9. 如何利用Matlab进行ROC分析

    ROC曲线基本知识: 判断分类器的工作效率需要使用召回率和准确率两个变量. 召回率:Recall,又称"查全率", 准确率:Precision,又称"精度".& ...

  10. 安卓--界面--改变image view

    switch (v.getId()) { case R.id.button: imageView.setImageResource(R.drawable.jelly_bean); break; def ...