何为UTF-8

作者:uuspider
链接:http://www.zhihu.com/question/23374078/answer/65352538
来源:知乎

你看到的unicode字符集是这样的编码表:

I 0049
t 0074
‘ 0027
s 0073
  0020
知 77e5
乎 4e4e
日 65e5
报 62a5

每一个字符对应一个十六进制数字。

计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:

I 00000000 01001001
t 00000000 01110100
‘ 00000000 00100111
s 00000000 01110011
  00000000 00100000
知 01110111 11100101
乎 01001110 01001110
日 01100101 11100101
报 01100010 10100101

这个字符串总共占用了18个字节,但是对比中英文的二进制码,可以发现,英文前9位都是0!浪费啊,浪费硬盘,浪费流量。

怎么办?

UTF。

UTF-8是这样做的:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

这样就形成了如下的UTF-8标记位:

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
... ...

于是,”It‘s 知乎日报“就变成了:

I 01001001
t 01110100
‘ 00100111
s 01110011
  00100000
知 11100111 10011111 10100101
乎 11100100 10111001 10001110
日 11100110 10010111 10100101
报 11100110 10001010 10100101

和上边的方案对比一下,英文短了,每个中文字符却多用了一个字节。但是整个字符串只用了17个字节,比上边的18个短了一点点。

时间: 2024-10-05 17:54:19

何为UTF-8的相关文章

何为绩效管理

何为绩效管理 --摘自<公司开了,你该这样管理>作者:张国祥 何为绩效管理 绩效是工作的有效成果.员工绩效就是员工工作的有效成果,企业绩效就是企业组织有效业绩的总和. 所谓绩效管理就是对绩效目标设立.达成.评价.运用.提升的循环管理过程. 企业管理本质上就是绩效管理.采用什么方法提高绩效管理水平因企业而异. 目前太多企业只有绩效考核,没有绩效管理:只有结果打分,不管过程改善.甚至很多企业只知绩效考核.不知绩效管理.实施绩效考核的企业员工报怨的多.满意的少.为什么会这样? 可能存在的原因如下:

UCS UTF UTF-7 UTF-8 UTF-16

Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案.Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS.UCS可以看作是"Unicode Character Set"的缩写.UCS规定了怎么用多个字节表示各种文字. UCS有两种格式:UCS-2和UCS-4. 顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,

C和C++的面向对象专题(1)——何为面向对象

题记: 面向对象是一种思想,而不是一门语言 我们上哪去找对象,都面向对象去了 本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 一.何为面向对象 现在学软件开发,都讲面向对象的编程模型,其实也很简单.用一句话来总结,面向对象就是将方法和方法的属性整合在一起,让每个方法引用的属性值尽可能在对象内部,对外

文字编码ASCII,GB2312,GBK,GB18030,UNICODE,UCS,UTF的解析

众所周知,一个文字从输入到显示到存储是有一个固定过程的,其过程为:输入码(根据输入法不同而不同)→机内码(根据语言环境不同而不同,不同的系统语言编码也不一样)→字型码(根据不同的字体而不同)→存储码(根据保存的编码类型不同而不同).不同的存储码之间又有什么异同呢? 一.ASCII系列编码 首先来说明ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),这个编码的时代就久远了,是由美国国家标准局(ANSI)制定,目

何为抽象?你有本末倒置吗?

一.何为抽象? 提到抽象,你会想到什么?是这些吗? 抽象是面向对象的基础,有了抽象才会有面向对象的三大特征:继承,封装,多态. 层与层联系要依赖抽象,上层依赖抽象,下层也要依赖抽象. 总之一句话,编程就是要依赖抽象. 等等这类的话,我们朗朗上口.那么回头再来看这些,它到底是什么? 它不是抽象,它是抽象的一些体现,也就是说这都是抽象后的结果,抽象的优点好处.作为程序员的我们要的就是抽象带来的这些结果,但是我们更重要的一个任务是,如何做出"抽象"?把抽象敲出来,有代码来体现.对于程序员来说

何为.Net Remoting【转】

借助基维百科给它的定义如下: NET Remoting 是微软 .NET Framework 中的一种网络通讯技术,与 XML Web Service 不同的是,它可以使用 SOAP 以外的协定来通讯,而在伺服端和用户端之间所操作的方法近乎相同,用户端可以不必考虑使用的协定,即可存取伺服端所开放的物件.这个技术与是由Distributed COM所发展而来的,与DCOM最大的不同是,DCOM有限制使用 TCP Port,但.NET Remoting 可以选择使用 TCP 或 HTTP 的方式通讯

详谈何为404错误及404处理方法

404问题绝对关乎网站的优化,而大部分网站都会有404错误的相关处理,比如一个网站删除了页面内容,正常网站将自动返回404状态码,搜索引擎进行更新并删除,避免对网站用户及搜索引擎带来负面影响.但问题来了,如果网站只删除了内容,没有任何主体内容的页面被保存了下来,未做404处理.当然,存在一类网站只删除内容后返回正常200状态码,提醒一句"该内容已删除",但其都没有.可以发现目前这个搜藏中的url仍然正常返回200,http://cang.baidu.com/Lee/snap/3b0a0

何为&ldquo;精通Java&rdquo;

何为精通Java?本来Java仅仅是一门语言,但从应用技术的角度来看,精通Java是可以无边无际的.很可能你可以对James说:我精通J2EE.JVM.Java服务器.大数据等等一些和Java相关的应用:况且这些应用是随着时间的发展而扩散的.那James就单纯从语言角度出发,整合网络上所看到的资料说一说. 怎么才算是精通Java呢?针对这一点,可从两个方面解读:纵向(从语言角度),在于深度:横向(从应用角度),在于广度. 从语言角度来说,也从一般人能够做到的程度,讲述James自己的体会: 1.

UTF与ascii区别

由于世界各地有很多语言,ascii的8个位不够用,世界各国就扩展位来表示他们当地语言,导致一个字符的位数不一样,于是iso就制定了UTF来统一标准. 参考:http://www.imkevinyang.com/2009/02/%E5%AD%97%E7%AC%A6%E7%BC%96%E8%A7%A3%E7%A0%81%E7%9A%84%E6%95%85%E4%BA%8B%EF%BC%88ascii%EF%BC%8Cansi%EF%BC%8Cunicode%EF%BC%8Cutf-8%E5%8C%B

UTF编码问题小结

在编程当中经常出现乱码的问题,而由此一般会引发很多惨剧,如读文件不成功.用户名显示乱码等,所以端午节抽了一小点时间好好看了一下编码问题,以备遗忘. 首先是中文编码,除了台湾和香港常用的BIG5,国内大概都用的是gb2312,这个可以从各大门户的首页源码中找到一些线索.还有一种叫gbk,这是微软对gb2312的拓展.主要由于gb2312只能表示6763个简体汉字,682个符号,具体可见字符区别. 然后是编程当中常见的utf编码,相信很多程序员都晕.比如我们最近在做android的NDK编程时,就发